问题标签 [server-sent-events]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2886 浏览

javascript - 每个应用程序应该只有一个 EventSource 对象吗?

当使用服务器发送事件时,客户端应该建立多个连接来接收它感兴趣的不同事件,还是应该只有一个连接并且客户端通过单独的通道指示它感兴趣的内容?IMO 后者似乎更可取,尽管对某些人来说它可能会使客户端代码更复杂。该规范支持命名事件(与特定主题相关的事件),这对我来说建议服务器发送事件连接应该用作所有事件的单一通道。

以下代码说明了启动多个 Server-Sent Event 连接的第一种情况:

eventSource1 将接收“topic1”事件,而 eventSource2 将接收“topic2”事件。虽然这非常简单,但对于您感兴趣的每个主题都会发生挂起的 GET 也非常低效。

替代方法如下:

在此示例中,将存在单个 EventSource,并且对特定事件的兴趣将由具有 Server-Sent Event 连接的单独请求指定,并且注册由 id 参数关联。topic3Listener 会收到“topic3”事件,而 topic4Listener 不会。虽然需要更多的代码,但好处是只建立了一个连接,但仍然可以以不同的方式识别和处理事件。

网络上有许多示例显示了命名事件的使用,但似乎事件名称(或主题)是预先知道的,因此客户端无需向服务器注册兴趣(示例)。虽然我还没有看到显示多个 EventSource 对象的示例,但我也没有看到显示客户端使用单独的请求来注册对特定主题的兴趣的示例,就像我在上面所做的那样。我对规范的解释使我相信,表明对某个主题(或事件名称)的兴趣完全取决于开发人员,并且可以在客户知道它将要接收的事件名称的情况下静态完成或客户端动态地提醒服务器它有兴趣接收特定事件。

我很想听听其他人对这个话题的看法。注意:我通常是 Java 开发人员,所以请原谅我平庸的 JS 代码.. :)

0 投票
0 回答
2030 浏览

google-chrome-extension - 如何在 Chrome 扩展程序中运行 SSE(服务器发送事件)?

我将脚本(background.js)设置为背景manifest.json

并将代码写入 background.js:

这些代码可以像正常的 html 页面http://localhost:8086/一样在 .

我已经放入http://localhost:8086/manifest.json 的“权限”。

0 投票
1 回答
344 浏览

apache - Apache + Thin + SSE 会起作用吗?

我们在所有应用程序前使用 Apache 作为代理。在 Thin 之前使用 Apache 作为代理服务器会起作用吗?我希望做一个聊天类型的应用程序,就像 Sinatra 提供的应用程序一样。

0 投票
4 回答
11290 浏览

websocket - Comet 现在是否已经过时了 Server-Sent Events 和 WebSocket?

还是服务器发送事件和 WebSocket 取代 Comet 技术?

0 投票
2 回答
6650 浏览

iis-7.5 - 如何为 SSE(服务器发送事件)和 SignalR 配置 IIS 7.5

我已经测试了我的 Asp.NET MVC 应用程序以运行 SignalR,它text/event-stream使用 Visual Studio 2012、IIS Express (Microsoft-IIS/8.0) 和 Chrome 正确处理带有 serverSentEvents 连接的 MIME。

现在我正在部署到生产环境(IIS 7.5、.NET Framework 4.5、Windows Server 2008R2),我注意到 SignalR 总是回退到 LongPolling 传输,因为signalr/connect?transport=serverSentEvents etc超时。

有没有办法配置 Microsoft-IIS/7.5 以使 ServerSentEvents 工作?还是仅在 8.0+ 上才有可能?

当我尝试直接访问 url 'http://my.webapp.com/MyHub/signalr/connect?transport=serverSentEvents&connectionId=624849a4-45c6-458b-b6d0-f7cb023ab226&connectionData=%5B%7B%22name%22%3A%22myHub%22%7D%5D&tid=2'时,我得到一个文件,其中包含看起来像 SSE 数据包的内容:

所以我不确定为什么超时会达到请求。

0 投票
2 回答
6254 浏览

java - EventSource 中的错误处理

我正在尝试制作一个使用 EvenSource 对象(在 javascript 中)来制作服务器发送事件(彗星)的页面。我阅读了很多关于它的教程,但没有找到解释以下问题的教程:

  1. 当我订阅 EventSource 的“onerror”事件时 - 我得到的参数类型是什么?我怎么知道究竟是什么错误?

  2. 我知道 EvenSource 有一个就绪状态,它的变化取决于浏览器。为什么每次“onmessage”事件发生后我的 readystate 都变为 0?(我使用铬)。

  3. 我如何证明我与服务器的连接保持连接而不是每次都重新连接?

浏览器:铬。

服务器端:Java(如果相关,我制作的示例在 Java EE 预览版中。但我将在 WebLogic 10R3 上工作。

在我的示例中发生的情况是数据正在从服务器发送到客户端,然后发生“onerror”事件(readystate 为 0),3 秒后(chrome 的默认值)它重新连接并再次发送数据。

javascript代码:

Java 代码:

如果还有什么你想知道的——告诉我。希望你能帮助我。

谢谢!

0 投票
1 回答
110 浏览

ruby - 调试涉及服务器发送事件的 Cramp 应用程序

我使用 Cramp ( http://cramp.in ) 在我的应用程序中实现服务器发送的事件。我使用 Thin 作为运行应用程序的服务器。在 Rails 中,我可以使用调试器 gem 来调试我的 rails 应用程序。调试器可以是也用于调试抽筋应用程序?

0 投票
4 回答
7668 浏览

php - 服务器发送的事件工作,但有大量的时间延迟

首先说这在我的本地机器上完美运行,下面的 js 示例连接到 stream.php 并每秒接收服务器当前时间的连续更新。

索引.php

流.php

上传到现场开发后,我确实预计会有一点延迟。服务器。但有大约 15 到 20 分钟的时间延迟。在我看到第一个条目之前。

连接不会断开。(可能已经进行了 40 分钟以上。)这只是一个 Apache 循环问题(意味着是时候查看 Web 套接字)还是我可以做些什么来解决这个问题?

0 投票
1 回答
1074 浏览

html - 通过 varnish 代理服务器发送的事件

我有一个网站在 Varnish 代理后面运行。为服务器发送的事件打开的任何连接都不会获得任何内容,也不会关闭。Varnish 似乎在将该内容转发到浏览器之前等待内容流结束。并且它保持与服务器的连接打开,直到内容结束。这两个问题都与服务器发送的事件不兼容。

如何配置 Varnish 以在浏览器关闭连接时立即将内容刷新到浏览器并关闭其与服务器的连接?

或者我可以动态地指示 Varnish 完全充当连接的传递,就好像它根本不存在一样?我可以毫无问题地在非代理系统上运行完全相同的 Web 应用程序。而且我无法在此设置中完全绕过 Varnish(例如不同的端口)。

0 投票
0 回答
337 浏览

url-rewriting - SignalR 重写规则导致 Chrome 退回到长轮询

从服务器https://a.local,我连接到 SignalR 连接:

然后会遇到处理跨域调用的 URL 重写规则。该规则将请求转换为:

这工作正常并收到消息。但是,在 Chrome(和 FF)中,它尝试与传输服务器SentEvents 连接,超时然后回退到 longPolling。

使用测试页面时传输服务器SentEvents 确实连接

所以我知道这种传输没有问题,只是重写规则有些奇怪。

我需要做些什么特别的事情才能让它工作吗?我是否需要以某种方式配置 IIS 以使 serverSentEvents 使用重写规则?

谢谢你的帮助。