web-dev-qa-db-ja.com

nodejsサーバーでHTTPキープアライブタイムアウトを設定する方法

実際にExpressJSサーバーに対して負荷テストを行っていますが、サーバーから送信された応答に「Connection:Keep-Alive」ヘッダーが含まれていることに気付きました。私の知る限り、サーバーまたはクライアントが「Connection:Close」ヘッダーを送信するまで、接続は開いたままになります。

いくつかの実装では、「Connection:Keep-Alive」ヘッダーは、接続タイムアウトと、この接続を介して送信される連続したリクエストの最大数を設定する「Keep-Alive」ヘッダーになります。

例:「キープアライブ:タイムアウト= 15、最大= 100」

Expressサーバーでこれらのパラメーターを設定する方法はありますか(また関連しています)?

そうでない場合、ExpressJSがこれを処理する方法を知っていますか?

Edit:いくつかの調査の後、デフォルトのタイムアウトが ノード標準httpライブラリ :で設定されていることがわかりました。

socket.setTimeout(2 * 60 * 1000); // 2 minute timeout

これを変更するには:

var http = require('http');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end("Hello World");
}).on('connection', function(socket) {
  socket.setTimeout(10000);
}).listen(3000);

とにかく、サーバーがクライアントにタイムアウトに関するヒントを送信しないということは、少し奇妙に見えます。

Edit2:josh3736のコメントに感謝します。

setSocketKeepAliveはHTTPキープアライブとは関係ありません。接続のもう一方の端が消えたことを検出できるTCPレベルのオプションです。

37
Miguel L.

Express 3の場合:

var express = require('express');
var app = express();
var server = app.listen(5001);

server.on('connection', function(socket) {
  console.log("A new connection was made by a client.");
  socket.setTimeout(30 * 1000); 
  // 30 second timeout. Change this as you see fit.
});
31
dgo.a