11

我想每 2 分钟向用户推送一次数据。使用 EventSource 需要每 29 秒额外推送一次空字节以保持连接打开。WebSocket 不需要这样的 ping。为什么 EventSource 连接会定期关闭和重新打开?是因为HTTP中没有好的内置方法来检查连接是否仍然打开还是其他原因?

4

2 回答 2

11

Server-Sent Events (Eventsource) API 在 HTTP 上分层。WebSocket 在 TCP 上分层(但具有与 HTTP 兼容的握手)。HTTP 和 TCP 都经常有空闲超时,然而,TCP 超时往往更长(例如 2 小时而不是 2 分钟)。因此,您可能仍然需要 WebSocket 中的保持活动消息,但它们的频率可能要低得多。此外,WebSocket 标准定义了浏览器/服务器可以为您执行此操作的 ping/pong 帧。

于 2012-01-06T16:51:01.777 回答
8

它可能取决于您的服务器端软件

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

于 2012-04-28T05:20:34.767 回答