6

コマンドラインで実行すると、client.destroy()の後にプログラムが停止します。

var client = http.get(options, 
        function(res) {
            console.log(res.statusCode);
            client.destroy();
          }
);

ただし、client.destroy()をres.on('end')内に配置した場合はそうではありません。

var client = http.get(options, 
        function(res) {
            console.log(res.statusCode);
            res.on('end', function() {
                console.log("done");
                client.destroy();
            });
          }
);

http.socketがnullであるため、例外がスローされます。だから、私はそれを破壊することはできません。

この場合、プログラムの実行はそこでハングし、終了しません。それを止めるために私は何ができますか?(process.exit()以外);

4

2 に答える 2

5

単一のリクエストの場合は、shouldKeepAliveをfalseに設定できます

var request = http.get(options, 
        function(res) {
            console.log(res.statusCode);
          }
);
request.shouldKeepAlive = false

またはConnection: closeヘッダーを送信します

リクエスト'end'イベントハンドラーでデタッチされているため、ソケットにアクセスできません

于 2011-07-12T03:04:04.807 に答える
0

あなたの質問へ:http.getまたはhttp.requestによって作成されたリクエストはデフォルトでそのソケット(接続)を閉じます。あなたはそれを閉じる必要はありません。

コード例:Nodejsは「res.on('end'、yourCb)」の前にres.on('end'、responseOnEnd)を登録しています。responseOnEndはソケットを閉じます。responseOnEndはyourCbの前に呼び出されるため、res.on('end'、yourCb)でソケットを破棄することはできません。

于 2022-02-27T10:52:35.383 に答える