Node.js如何检测浏览器端已结束一个HTTP会话?

时间:2011-02-23 11:58:22

标签: node.js xmlhttprequest comet

我正在尝试使用Node.js实现Comet(XHR Streaming)。由于XHR Streaming使客户端XHR.responseText不断增长,客户端必须关闭当前XHR并重新启动XHR Streaming。

在服务器端,对于每个XHR流,http.ServerResponse对象应该保持到HTTP会话结束。

问题是:Node.js如何检测浏览器端已结束一个HTTP会话?

我认为,理想情况下,http.ServerResponse.write有一个回调参数。因此,写入封闭的HTTP会话将触发回调并让我们知道它已中止。但是,没有这样的回调论点。

4 个答案:

答案 0 :(得分:1)

我认为http://socket.io/将通过client.on('disconnect', function(){ … })

完成您所需的工作

答案 1 :(得分:1)

req.socket似乎不是已发布的媒体资源。我用过:

res.connection.on('close', function() {
...  
});

答案 2 :(得分:0)

正如@macarthy已经提到的:socket.io是使用node.js进行彗星实现的方法。

但是,如果您希望自己实现XHR Streaming,每个http.ServerResponse上都应该有一个名为'end'的事件。每个会话触发此事件一次,没有任何参数通知您的应用程序已关闭响应。

答案 3 :(得分:0)

我总是使用类似的东西。

var server = http.createServer(function(req, res) {
    req.socket.addListener("end", function() {
      ///he gone
    });
});