1

私はclose eventNode.jsで実験しています。私は Node.js に非常に慣れていないので、これがまともな質問なのか悲しい質問なのかわかりません。

ドキュメントclose event: http://nodejs.org/api/http.html#http_event_close_2

end eventに到達する前にブラウザを閉じた場合、コンソールにメッセージを出力したい。

サーバーの実行中に 15 秒になる前に、ブラウザーを閉じて、Chrome ツールを使用してプロセスを強制終了しようとしました。コンソールにメッセージが出力されず、他のウィンドウで localhost:8080 にアクセスして他の接続を開くと、ノード サーバーが少なくとも 2 つの接続があると認識していることを示す「こんにちは」がすぐに表示されます。

Chrome でプロセスを強制終了する方法、またはイベント クローズがどのように機能するかを理解していません。

または、EndCloseが同じ場合 - node.js https no response 'end' event, 'close' 代わりに? -なぜ私の「彼らはせっかちになった!」ではないのですか?メッセージがまだコンソールに出力されていますか?

イベントが終了する前にプロセスが終了した場合、どのようにコンソールに出力できますか?

var http = require('http'),
    userRequests = 0;


http.createServer(function(request,response){
userRequests++;

response.writeHead(200, {'Content-Type' : 'text/plain'});

if ( userRequests == 1 ){

    response.write('1st \n');
    setTimeout ( function() {
        response.write('2nd Thanks for waiting. \n');
        response.on('close', function() {

            console.log("They got impatient!");

        });
        response.end();
    }, 15000);
    response.write('3rd \n');
}
else {
    // Quick response for all connections after first user
    response.write('Hello');
    response.end();
}
}).listen(8080, function() {
console.log('Server start');
});

ありがとうございました。

4

1 に答える 1

2

まず、クローズ メッセージのイベント ハンドラーをタイムアウト関数の外側に移動します。タイムアウトが期限切れになるまでクローズ ハンドラーを接続していないため、おそらくイベントを見逃しています。

第二に、どこでも userRequests を減らすことはありません。userRequests--;どこかに線を引くべきではありませんか?常に複数のリクエストがあるように見えるため、これはロジックから外れます。

于 2013-04-16T21:25:49.423 に答える