我实际上正在对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);
无论如何,对我来说,它仍然看起来有点奇怪,服务器没有向客户端发送关于其超时的任何提示。
编辑2:
感谢josh3736的评论。
setSocketKeepAlive与HTTP保持活动无关。它是一个TCP级别选项,允许您检测到连接的另一端已经消失。
解决方法
快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. })