我实际上正在对 ExpressJS 服务器进行一些负载测试,我注意到服务器发送的响应包含一个“Connection: Keep-Alive”标头。据我了解,连接将保持打开状态,直到服务器或客户端发送“连接:关闭”标头。
在一些实现中,“连接:保持活动”标头带有设置连接超时和通过该连接发送的连续请求的最大数量的“保持活动”标头。
例如:“保持活动:超时=15,最大值=100”
有没有办法(并且相关)在 Express 服务器上设置这些参数?
如果没有,你知道 ExpressJS 如何处理这个问题吗?
Edit:经过一番调查,我发现默认超时设置在节点标准http库 https://github.com/joyent/node/blob/master/lib/http.js#L1688:
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 级别的选项,允许您检测连接的另一端是否已消失。