request.close事件在node.js服务器中不会​​触发

我正在使用node.js作为服务器的长轮询应用程序。 具体的任务是立即学习,然后用户下线。 所以,我必须听取request.close事件,对吗?

我从如何检查连接是否在node.js服务器中被中止复制下面的一段代码

var http = require("http"), util = require("util"); var httpServer = http.createServer(function(req, res) { util.log("new request..."); // notify me when client connection is lost req.on("close", function(err) { util.log("request closed..."); }); // wait with response for 15 seconds setTimeout(function() { res.writeHead(200, {'Content-Type': 'text/plain'}); res.write("response"); res.end(); util.log("response sent..."); }, 15000); }); httpServer.listen(8888, "127.0.0.1"); util.log("Running on 8888"); 

我无法正常工作:

  1. 我在浏览器中打开与node.js服务器连接的特定URL

  2. 之后,点击“停止”button。

  3. Node.js等待15秒,就好像连接还活着,然后logging“响应已发送”。

我关掉了nginx以防止出现任何问题,结果是一样的。 我试图听req.connection.on(“close”)事件,结果又是一样的。 nodejs版本是0.4.12。

什么可能是错的?

首先,你两次提到一个onclose事件,然后发布代码来监听close事件。 有些人看到这样的东西时,会跳过你的问题。

其次,TCP连接是操作系统代表应用程序pipe理的东西。 根据你如何build立和断开一个连接,TCP连接完全有可能在你认为已经损坏了几分钟后才能持续存在。 做一些关于TCP,socket和连接的研究。