2013-11-20 2 views
3

Когда http.IncomingMessage запускает свое «закрытое» событие?node.js http.IncomingMessage не запускает событие «закрыть»

В соответствии с documentation это должно происходить при закрытии подстилающего соединения. Тем не менее, никогда не вызывается для следующего примера кода (я сделал уверен, что это не вызвано 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.

+0

Я не уверен, но как насчет попытки прервать запрос до его завершения? Простите меня, если я говорю «бычьего дерьма» – gustavohenke

+0

вы правы, может быть, «close» уволен, когда базовое соединение закрыто до отправки ответа? – roediger

+1

Попробуйте, добавьте несколько секунд задержки и посмотрите, что произойдет – gustavohenke

ответ

5

Событие «закрыть», когда базовое соединение было закрыто до отправки ответа.

Может быть протестирован с использованием следующего кода сервера и прервать запрос на полпути.

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!

Смежные вопросы