ExpressJS サーバに対して負荷テストを行っているのですが、サーバから送信されるレスポンスに "Connection.Keep-Alive"ヘッダが含まれていることに気づきました。Keep-Alive"ヘッダーが含まれています。私が理解する限り、サーバーまたはクライアントが "Connection.Close"ヘッダを送信するまで、接続は開かれたままです。Close"ヘッダーを送信するまで、接続が開かれたままになります。
一部の実装では、"Connection:Keep-Alive"ヘッダーは、接続タイムアウトとこの接続を介して送信される連続したリクエストの最大数を設定する "Keep-Alive" ヘッダーで出てくる。
例:"Keep-Alive: timeout=15, max=100"。
Express サーバーでこれらのパラメーターを設定する方法はありますか(また、それは適切ですか)?
ない場合、ExpressJS がこれをどのように処理するか知っていますか?
編集: 調べたところ、node standard http libraryでデフォルトのタイムアウトが設定されていることが分かりました。
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);
いずれにせよ、サーバーがタイムアウトに関するヒントをクライアントに送らないのは、私にはまだ少し奇妙に見えます。
編集2: josh3736さんのコメントに感謝します。
setSocketKeepAliveはHTTP keep-aliveとは関係ありません。TCPレベルのオプションで、接続の相手先が消えたことを検出するためのものです。
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.
});