2
我正在使用node.js作为服务器的长轮询应用程序。具体任务是立即学习,然后用户离线。所以,我必须听取request.close事件,对吧?request.close事件不会在node.js服务器中触发
我复制从How to check if connection was aborted in node.js server
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");
下面的代码段,我不能让它正常工作:
我与Node.js的服务器连接浏览器特定的URL打开
紧随其后单击“停止”按钮。
Node.js等待15秒,就好像连接还在, 然后记录“响应已发送”。
我关掉了nginx以防止出现任何问题,结果是一样的。我试图听req.connection.on(“close”)事件,结果又是一样的。 nodejs版本是0.4.12。
出了什么问题?
我描述了我建立和断开连接的方式 - 只需在浏览器中用nodejs URL打开页面,然后单击“停止”按钮。这是很常见的方式,不是吗? 我也知道,大部分在线聊天应用程序(如GMail中的聊天记录)都可以理解用户在关闭长轮询连接后才离线。如果我使用与我的例子相同的操作系统和浏览器,他们如何做? – alevkon
单击停止按钮时,要知道浏览器做什么的唯一方法是阅读浏览器源代码,或使用Wireshark并观察网络流量。仅仅对TCP编程最佳实践进行一些研究就容易多了。像这样的东西http://msdn.microsoft.com/en-us/library/windows/desktop/ms738547(v=vs.85).aspx和这个http://fixunix.com/unix/526177-how-fast -close-socket.html –