【问题标题】:Why is EventSource connection closed every 30-60 sec when no data transported, while WebSocket's one is kept open?为什么没有数据传输时 EventSource 连接每 30-60 秒关闭一次,而 WebSocket 的连接保持打开状态?
【发布时间】:2012-02-04 08:53:55
【问题描述】:

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

【问题讨论】:

    标签: html http webkit websocket event-stream


    【解决方案1】:

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

    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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 没有什么是 TCP 空闲超时。一些防火墙可能会切断空闲连接,除非 TCP 被配置为发送 keepalive 数据包(通常是这样),但 TCP 本身永远不会关闭空闲连接。 HTTP 服务器一般会关闭 HTTP 连接以节省资源。
      猜你喜欢
      • 1970-01-01
      • 2020-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多