问题标签 [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 投票
1 回答
574 浏览

php - 如何使用服务器发送事件 HTML 5 创建图片库

我想创建一个全屏图像播放列表,它可以从 Web 服务器中的文件夹中旋转图像。

如果我放入新图像,浏览器将自动将新图像置于旋转状态,如果我删除图像,它应该从旋转中删除图像。

我可以使用什么技术或插件来创建这样的东西?

感谢您的关注。

0 投票
3 回答
18088 浏览

javascript - JavaScript EventSource SSE 未在浏览器中触发

我一直在开发一个 nodejs 服务器来为我正在用 HTML5 开发的新网站提供服务器端事件。

当我远程登录到服务器时,它工作正常,向我发送所需的 HTTP 响应标头,然后是我目前每 2 或 3 秒生成的事件流,以证明它有效。

我已经尝试了最新版本的 FireFox、Chrome 和 Opera,它们创建了 EventSource 对象并连接到 nodejs 服务器 OK,但是没有一个浏览器生成任何事件,包括 onopen、onmessage 和 onerror。

但是,如果我停止我的 nodejs 服务器,终止来自浏览器的连接,它们都会突然发送所有消息并显示我的所有事件。然后浏览器都尝试按照规范重新连接到服务器。

我在网络服务器上托管所有内容。本地文件中没有运行任何内容。

我已经阅读了我可以在网上找到的所有内容,包括我购买的书籍,但没有任何迹象表明存在任何此类问题。有什么我想念的吗?

示例服务器实现

一个示例 html 页面

这些示例是基本的,但与我在书籍和在线看到的所有其他演示相同。eventSource 似乎只有在我结束客户端连接或终止服务器时才有效,但这将是轮询而不是 SSE,我特别想使用 SSE。

有趣的是,当我在线使用它们时,例如来自html5rock的 thouse 之类的演示似乎也无法正常工作。

0 投票
1 回答
3525 浏览

html - WebAPI 和 HTML5 SSE

试图封装一个部分视图以显示我可以推回给客户的反馈。

本文展示了一种使用 HTML5 服务器发送事件 (SSE) 推回数据的方法。

我注意到,如果我打开几个浏览器选项卡然后关闭一个,我会遇到异常,因为逻辑没有从 ConcurrentQueue 中删除相应的流。我修改了代码如下

我还必须修改 OnStreamAvailable 成员,因为框架语法已更改为第二个参数是 HttpContent 而不是 HttpContentHeaders

现在的问题是,如果我添加或删除客户端,我仍然会出现不一致的行为,即尝试初始化新客户端时它会超时。有没有人有任何想法或更多使用 SSE 与 WinAPI 和正确的“方法框架”来处理断开连接的客户端的例子

干杯蒂姆

0 投票
3 回答
4161 浏览

node.js - Heroku SSE 请求上的 H15

我在 Heroku 上有一个 Node.js 应用程序。我最近切换了一个长查询以使用 SSE (EventSource)。虽然它在我的机器上运行良好且快速,但我不断收到Error H15 (Idle connection)我的 GET 请求。H15 描述说我每笔交易允许超过 55 秒。但我的整个查询不会超过 4-5 秒。

此外,在阅读了描述之后,我会在点击查询后立即返回我的第一个字节(只是一个数字),然后再开始任何繁重的工作 - 它仍然无法正常工作。

我的问题是:

  1. 为了让这件事继续下去,我需要做什么?HTTP 标头参数?客户端JS端的东西?如何避免 H15?
  2. 我是在尝试做 Heroku 不支持的事情吗?我不这么认为,因为我在 Heroku 上有另一个成功使用 EventSource 的应用程序(express-eventsource.herokuapp.com,github 上的源代码:https ://github.com/TravelingTechGuy/express-eventsource )

一如既往,感谢您的宝贵时间。

0 投票
1 回答
635 浏览

ruby - 通过 Cramp(Ruby) 和 SSE(HTML5) 实时更新

我准备了一个示例应用程序,以使用Cramp(Ruby)SSE(HTML5)从服务器实时获取更新。

通过访问 html 时出现以下错误http://localhost/sse_time.html

sse_time.html

应用程序/动作/time_action.rb

line 9在哪里var source = new EventSource('http://localhost:3000/time');

如果我http://localhost:3000/time在 chrome 中点击,它会在每 5 秒后显示时间,没有任何错误。

但是使用 PHP 代码可以很好地http://localhost:3000/timestream.phpin替换 URIsse_time.html

流.php

这里stream.phpsse_time.html居住在同一地点。

有人可以指导我解决这个问题吗?

0 投票
1 回答
907 浏览

internet-explorer - 为什么 SignalR 在 IE 上使用 Forever Frame 而不是 Server-Sent 事件?

为什么 SignalR 在 IE 上使用 Forever Frame 而不是 Server-Sent 事件?是因为 IE 不支持 SSE 还是没有 Forever Frame 方法那么有效?

0 投票
2 回答
7280 浏览

websocket - 使用 Server-Sent 事件进行双向客户端-服务器通信(而不是 WebSockets)的缺点

最近,我发现 Server-Sent 事件作为 WebSockets 的一种更简单的替代方案,用于从服务器进行推送。大多数比较它们的地方(如这里这里这里)都说,如果您不需要客户端和服务器之间的全双工通信,那么 WebSockets 就过分了,而 SSE 就足够了。

我的问题是当您确实需要双向通信(例如聊天)时使用 SSE 的缺点是什么,使用常规 ajax 请求从客户端发送消息并使用服务器流接收它们?考虑到我几乎不需要在服务器端进行任何配置即可使用 SSE,这似乎是一个更具吸引力的选择。

0 投票
1 回答
3943 浏览

android - EventSource 不会在 Android Firefox 上自动重新连接

我正在尝试实现一个可以在桌面、Android 和 iOS 上运行的 HTML5 应用程序。该应用程序的主要功能是向服务器无线发送有关要运行哪些脚本的命令,并接收从该服务器推送的有关这些脚本状态的常规消息。

服务器正在运行 nodejs,我决定使用服务器发送事件来进行推送通知。这要求我在 Android 上使用 Firefox,因为原生 Android 浏览器不支持 SSE。

我的实现一切正常:节点服务器按应有的方式发布事件,我的客户端 HTML5/javascript 在桌面 chrome/firefox/safari、我的 iPod iOS6 和我的 Android 2.2 手机上正常运行。

但是,我需要处理 4 种常见情况:

  • 设备失去其 wi-fi 信号
  • nodejs 服务器崩溃(希望这不常见!)
  • 在浏览另一个应用程序等时将浏览器置于 iPod/Android 的后台。
  • 浏览器运行时在 iPod/Android 上锁定屏幕

Chrome/Safari 在台式机和 iPod 上都表现完美,如下所示:如果服务器崩溃,网站会自动重新连接并在服务器再次启动时立即获取推送的消息,如果浏览器应用程序因任何原因进入后台,它仍然在后台收到这些消息,或者至少在它回到前台时自动重新连接。

然而,无论是桌面版还是安卓版的 Firefox 都急于永久关闭该 EventSource 连接。一旦浏览器失去与服务器的连接,无论是服务器崩溃、将 firefox 应用程序置于后台还是锁定屏幕,EventSource 连接都会被终止,并且不会尝试重新连接。当然,您可以在返回页面时重新加载页面,但这很烦人,尤其是在您需要将手机放在口袋里而需要锁定屏幕的情况下(此应用程序需要在一些徒步旅行的情况)。

除了一直在 Android Firefox 中重新加载页面之外,任何人都可以推荐任何解决方案吗?下面是我的虚拟实现,每 5 秒发送一次随机数。

服务器位于 /main/src

客户

谢谢!!

0 投票
1 回答
472 浏览

javascript - HTML5 服务器发送事件:技术细节?

我对 HTML5 的新服务器发送事件的技术背景感兴趣。那里真的发生了什么?

  • 您不需要服务器端的特殊功能 - 只需像往常一样发送您的数据,例如 html
  • HTTP 仍然是一个请求/响应协议。在我看来,新的内容类型“文本/事件流”不会改变这一点

那么这个概念只是“普通旧长轮询”的封装版本吗?另一方面,它通常被描述为与服务器的持久、双向连接。在我看来,这将是不同的东西。我只是想了解这如何在 http 之上工作。

0 投票
1 回答
259 浏览

php - 对服务器发送的事件感到困惑

我有一个sse.php读取数据并将其发送回客户端的页面。

它工作得很好,除了它每 N 秒开始一次。

我知道 EventSource 每 N 秒重新连接一次,并且我的 php 脚本一次又一次地启动。

我如何确定第一个连接是什么连接,什么只是保持重新连接?

然后我会知道运行阅读脚本的连接和不连接的连接。

在 WebSockets 上,我知道它只连接一次,然后我只发送数据。

如何获得与上证所相同的东西?