我正在使用node.js进行长时间轮询。 基本上,node.js服务器接受来自用户的请求,然后检查一些更新。如果没有更新,它将在超时后检查它们。 但是,如果用户关闭了他的标签页或转到了另一个页面怎么办?就我而言,脚本继续工作。 当用户中止请求(关闭连接)时,node.js中是否可以检查或检测或捕获事件?
多亏了 Miroshko 和 yojimbo87的 回答,我才能够赶上’close’事件,但是我不得不做一些其他的调整。
仅仅捕获“关闭”事件并不能解决我的问题的原因是,当客户端将请求发送到node.js服务器时,如果连接仍处于打开状态,则服务器本身无法获取信息,除非他向其发送了一些东西。客户端(据我了解- 这是因为HTTP协议)。 因此,另一项调整是不时为响应编写一些内容。 阻止此工作的另一件事是,我将“ Content-type”设置为“ application / json”。将其更改为“ text / javascript”有助于流式传输“空白” 最后,我有这样的事情:
var server = http.createServer(function(req,res){ res.writeHead(200, {'Content-type': 'text/javascript'}); req.connection.on('close',function(){ // code to handle connection abort }); /** * Here goes some long polling handler * that performs res.write(' '); from time to time */ // some another code... }); server.listen(NODE_PORT, NODE_LISTEN_HOST);
我的原始代码要大得多,因此为了展示敏感部分,我不得不将其削减很多。
我想知道是否有更好的解决方案,但这目前对我有用。