一尘不染

如何检查Node.js服务器中的连接是否中止

node.js

我正在使用node.js进行长时间轮询。
基本上,node.js服务器接受来自用户的请求,然后检查一些更新。如果没有更新,它将在超时后检查它们。
但是,如果用户关闭了他的标签页或转到了另一个页面怎么办?就我而言,脚本继续工作。
当用户中止请求(关闭连接)时,node.js中是否可以检查或检测或捕获事件?


阅读 297

收藏
2020-07-07

共1个答案

一尘不染

多亏了 Miroshkoyojimbo87的 回答,我才能够赶上’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);

我的原始代码要大得多,因此为了展示敏感部分,我不得不将其削减很多。

我想知道是否有更好的解决方案,但这目前对我有用。

2020-07-07