node.js http.IncomingMessage не запускает событие 'close'
Когда http.IncomingMessage запускает событие 'close'?
Согласно документации это должно произойти, когда нижележащее соединение было закрыто. Однако он никогда не вызывается для следующего примера кода (я убедился, что он не вызван keep-alive):
var http = require('http'),
fs = require('fs');
var server = http.createServer(function(req, res) {
res.shouldKeepAlive = false;
req.on("end", function() {
console.log("request end");
});
req.on("close", function() {
console.log("request close"); // Never called
});
res.end("Close connection");
});
server.listen(5555);
Я использую node.js v0.10.22.
1 ответ
Решение
Событие close вызывается, когда основное соединение было закрыто до того, как был отправлен ответ.
Может быть проверено с использованием следующего кода сервера и прерыванием запроса на полпути.
var http = require('http'),
fs = require('fs');
var server = http.createServer(function(req, res) {
res.shouldKeepAlive = false;
req.on("end", function() {
console.log("request end");
});
req.on("close", function() {
console.log("request close"); // Called, when connection closed before response sent
});
setTimeout(function () {
res.end("Close connection");
}, 5000); // Wait some time to allow user abort
});
server.listen(5555);
Благодаря gustavohenke!