web-dev-qa-db-ja.com

Express.jsのクローズレスポンス

応答を閉じる方法はありますか? res.end()を使用できますが、実際にはソケットを閉じません。

私が達成したいこと:私はネットワークとインターフェースするJavaプログラムを書いています、そして私はこれのためにnode.jsサーバーを書いています。Javaコード:

_String line;
while((line = in.readLine()) != null) {
    System.out.println("RES: "+line);
}
_

しかし、これはただハングし続けます。エンド接続はなく、ソケットからの入力を待っています。

ノード:

_exports.getAll = function (req, res) {
    res.set("Content-Type", "text/plain");
    res.set(200);
    res.send(..data..);
    res.end();
}
_

ただし、res.end()は接続を閉じません。前に述べたように、Javaは次に何かがあると考え続けているため、whileループでスタックします。

ありがとうございました

20
Matej

デフォルトのキープアライブ戦略の代わりに、接続を閉じるようにHTTPヘッダーを設定することで解決しました。

res.set("Connection", "close");
28
code ninja

接続を閉じたいだけの人がこれを見つけた場合は、 res.socket または res.connection を使用して net.Socket を取得できます。 = destroy メソッドに付属するオブジェクト:

res.connection.destroy();
1
Spect