3

http.IncomingMessage はいつ「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");    // Never called
    });
    res.end("Close connection");
});
server.listen(5555);

node.js v0.10.22 を使用しています。

4

1 に答える 1

6

「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に感謝します!

于 2013-11-22T14:47:39.800 に答える