我实际上正在对ExpressJS服务器进行一些负载测试,我注意到服务器发送的响应包括一个"Connection:Keep-Alive"标头.据我所知,连接将保持打开状态,直到服务器或客户端发送"Connection:Close"标头.
在一些实施方式中,"Connection:Keep-Alive"标题出现"Keep-Alive"标题,设置连接超时和通过该连接发送的连续请求的最大数量.
例如:"Keep-Alive:timeout = 15,max = 100"
有没有办法(并且相关)在Express服务器上设置这些参数?
如果没有,你知道ExpressJS如何处理这个问题吗?
编辑: 经过一些调查,我发现默认超时是在节点标准http库中设置的:
socket.setTimeout(2 * 60 * 1000); // 2 minute timeout
Run Code Online (Sandbox Code Playgroud)
为了改变这个:
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);
Run Code Online (Sandbox Code Playgroud)
无论如何,对我来说,服务器没有向客户端发送有关其超时的任何提示仍然看起来有点奇怪.
编辑2: 感谢josh3736的评论.
setSocketKeepAlive与HTTP keep-alive无关.它是一个TCP级别选项,允许您检测连接的另一端是否已消失.
我正在使用 Express 和 body-parser 将大量数据从一台服务器发送到另一台服务器,但一段时间后我收到此异常:
{
"message": "request aborted",
"code": "ECONNABORTED",
"expected": 99010,
"length": 99010,
"received": 96872,
"type": "request.aborted"
}
Run Code Online (Sandbox Code Playgroud)
什么可能导致这种情况?如果您需要更多信息,请告诉我。
更新 这是我配置的限制:
application.use(bodyParser.json({ limit: '50mb' }));
application.use(bodyParser.urlencoded({ extended: true, limit: '50mb' }));
Run Code Online (Sandbox Code Playgroud) 我使用Express 4.X和节点js 0.12.
我的一条路线是文件上传和处理,对于某些文件,上传和处理需要超过2分钟的默认超时.我试图将timeout设置为超过2分钟的值,但它只是不工作,服务器每次2分钟后正好关闭连接.
server.timeout = 60 * 60 * 1000; // still closes after 2 minutes
server.on('connection', function(socket) {
socket.setTimeout(700 * 1000); // still closes after 2 minutes
});
res.setTimeout(0);// still closes after 2 minutes
req.setTimeout(0);// still closes after 2 minutes
res.connection.setTimeout(0);// still closes after 2 minutes
Run Code Online (Sandbox Code Playgroud)
连接超时中间件也没有帮助,它只是在2分钟后继续关闭连接.尝试将节点版本更改为旧版本但没有成功.尝试在网上找到的所有变化,但连接仍然关闭...
http.request我正在使用 Node.js(版本 0.10.28)为大量数据(来自 PostgreSQL 数据库的 21,000 行)创建 Ruby API 。问题是请求似乎超时并在 1 分钟后返回 404 错误。我知道这是真的,因为 Ruby API 返回 61 秒的请求,并且我计算了 Node 的请求花费的时间(结果为 60 秒和 404)。但是,如果我wget使用 jQuery,$.ajax超时时间为 4 分钟,我可以获得 21,000 行。很明显,它不可能是 404,因为还有其他获取数据的方式。
我也有点困惑,因为无论我看什么,http.request根据以下说法,直到 2 分钟后才应该超时:
我尝试了几种方法来使其正常工作,包括:设置express的中间件;侦听套接字超时并恢复请求;并将超时设置为0,这样就不会超时。不幸的是,这些方法都不起作用,或者至少从我的理解来看是这样。
为了清楚起见,这是我的代码...设置该限制意味着仅返回 18,000 条记录,这似乎是 API 花费超过 60 秒的截止点:
var http = require('http');
var options = {
path: '/api/records.json?limit=18000',
method: 'GET',
host: 'localhost',
requestCert: true,
rejectUnauthorized: false
};
var req = …Run Code Online (Sandbox Code Playgroud) 我相信 node.js,有一个server.timeout设置。你知道如何在 express.js 中设置服务器超时吗?