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 –