43

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

一部の実装では、「Connection: Keep-Alive」ヘッダーに、接続タイムアウトと、この接続を介して送信される連続要求の最大数を設定する「Keep-Alive」ヘッダーが含まれています。

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

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

そうでない場合、ExpressJS がこれをどのように処理するか知っていますか?

編集: いくつかの調査の後、デフォルトのタイムアウトがノードの標準 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 レベルのオプションです。

4

3 に答える 3

37

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.
});
于 2012-11-20T23:28:47.917 に答える