【问题标题】:Connection lost with response.end in node.jsnode.js 中的 response.end 连接丢失
【发布时间】:2011-07-25 20:14:43
【问题描述】:

我正在使用 node.js 来拥有多个客户端。现在,在我的代码中,我正在监听一个端口,每次客户端连接时,我想向所有其他客户端发送一条广播消息,比如说。每次有新客户连接时,我都会引发一个新事件,并且我会向他发送响应。当我说 response.end() 时,之后我无法向该特定客户端发送任何内容。但是,浏览器一直在加载并等待 response.end。 无论如何没有使用socket.io? 我知道 socket.io 有它的用途,但我真的很想知道是否可以不使用 socket.io。

【问题讨论】:

    标签: javascript node.js socket.io response.write


    【解决方案1】:

    我会说在您的客户端中使用两个渠道;一个接收更新(通道保持打开,或经常查询更新),一个刷新数据。它涉及到你的一些工作来重组客户端和服务器,但我认为使用两个通道是解决你的问题的最干净的方法。

    【讨论】:

    • 感谢您的快速回复,但无论哪种方式,我都必须指定一个 response.end(),这似乎每次都会结束我的连接。因此,在那之后我无法再次向客户端发送消息。如果我不断刷新,而不是 node.js,我可以让一个普通的服务器和客户端不时轮询,对吗?所以,我试图避免这种情况。两个渠道是指所有客户都在两个渠道上吗?
    【解决方案2】:

    如果您不发送 .end() ,浏览器将继续等待。但是,如果您关闭通道,您将无法通过它发送任何内容。因此,要么使用 socket.io,要么通过 XHR 打开一个通道,并保持它为每个客户端打开以接收消息。不过,由您决定是否充分构建消息(实现您的应用协议)。我认为保罗是对的。

    【讨论】:

    • 对,我正在尝试像你说的那样使用 XHR,并保持打开状态。但是对于 XHR,我只想说连接 = 保持活动,对吗?还有其他地方我必须指定使用 XHR 打开它吗?
    • connection: keep-alive 是一个标头,您可以指定打开连接,但如果您使用 jQuery,我认为它已经为您设置好了。
    【解决方案3】:

    尝试长轮询,这意味着让来自浏览器的 ajax 请求“挂起”,直到服务器可以发回一些东西。

    How do I implement basic "Long Polling"?

    使用 nodejs,您可以轻松地为客户端存储响应对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-18
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      相关资源
      最近更新 更多