【发布时间】:2012-02-04 08:53:55
【问题描述】:
我想每 2 分钟向用户推送一次数据。使用 EventSource 需要每 29 秒额外推送一次空字节以保持连接打开。 WebSocket 不需要这样的 ping。为什么 EventSource 连接会定期关闭和重新打开?是因为HTTP没有内置好的方法来检查连接是否仍然打开还是其他原因?
【问题讨论】:
标签: html http webkit websocket event-stream
我想每 2 分钟向用户推送一次数据。使用 EventSource 需要每 29 秒额外推送一次空字节以保持连接打开。 WebSocket 不需要这样的 ping。为什么 EventSource 连接会定期关闭和重新打开?是因为HTTP没有内置好的方法来检查连接是否仍然打开还是其他原因?
【问题讨论】:
标签: html http webkit websocket event-stream
这可能取决于您的服务器端软件
node.js 有 2 分钟的默认超时时间
这是关于它的文章 - http://contourline.wordpress.com/2011/03/30/preventing-server-timeout-in-node-js/
解决方案:
res.connection.setTimeout(0); // this could take a while
【讨论】:
Server-Sent Events (Eventsource) API 在 HTTP 上分层。 WebSocket 在 TCP 上分层(但具有与 HTTP 兼容的握手)。 HTTP 和 TCP 通常都有空闲超时,但是 TCP 超时往往要长得多(例如 2 小时而不是 2 分钟)。因此,您可能仍然需要 WebSockets 中的保持活动消息,但它们的频率可能要低得多。此外,WebSocket standard 定义了浏览器/服务器可以为您执行此操作的 ping/pong 帧。
【讨论】: