我实际上正在对ExpressJS服务器进行一些负载测试,我注意到服务器发送的响应包括一个" 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);
无论如何,对我来说,服务器没有向客户端发送关于其超时的任何提示仍然看起来有点奇怪。
EDIT2: 感谢josh3736的评论。
setSocketKeepAlive与HTTP keep-alive无关。它是一个TCP级选项,允许您检测连接的另一端是否已消失。
答案 0 :(得分:32)
快递3:
var express = require('express');
var app = express();
var server = app.listen(5001);
server.listen(3000);
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.
});
答案 1 :(得分:1)
要在快递服务器上设置keepAliveTimeout,请执行以下操作:
var express = require('express');
var app = express();
var server = app.listen(5001);
server.keepAliveTimeout = 30000;