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

Node.js如何检测浏览器端已结束一个HTTP会话?,node.js,xmlhttprequest,comet,Node.js,Xmlhttprequest,Comet,我正试图用Node.js实现Comet(XHR流)。由于XHR流使客户端XHR.responseText不断增长,因此客户端必须关闭当前的XHR并重新启动XHR流 在服务器端,对于每个XHR流,应该保留http.ServerResponse对象,直到http会话结束 问题是:Node.js如何检测浏览器端结束了一个HTTP会话 我认为,理想情况下,http.ServerResponse.write有一个回调参数。因此,写入关闭的HTTP会话将触发回调并让我们知道它已中止。但是,没有这样的回调参数

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

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

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


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

我认为将对
客户端执行您需要的操作。on('disconnect',function(){…})
正如@macarthy已经提到的:socket.io是使用node.js实现comet的方法


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

我总是使用类似

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

req.socket
似乎不是已发布的属性。我使用了:

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

如果启用了HTTP保持活动,它是否工作?一个套接字连接可能服务于多个http会话。我不能肯定,但由于套接字位于http堆栈之上,我认为这无关紧要。