node.js - 如何在 nodejs 服务器中设置 HTTP Keep-Alive 超时

标签 node.js http-headers express keep-alive

我实际上是在对 ExpressJS 服务器进行一些负载测试,我注意到服务器发送的响应包含一个“Connection: Keep-Alive” header 。据我了解,连接将保持打开状态,直到服务器或客户端发送“连接:关闭” header 。

在某些实现中,“Connection: Keep-Alive” header 带有“Keep-Alive” header ,用于设置连接超时和通过此连接发送的最大连续请求数。

例如:“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.
});

关于node.js - 如何在 nodejs 服务器中设置 HTTP Keep-Alive 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12651466/

相关文章:

node.js - 如何从 Node js将数据发送到azure事件网格中的主题端点

javascript - Facebook Messenger Bot Webhook 问题

javascript - 获取异步父函数的参数

http - HTTP Content-Security-Policy 是按页面设置还是按 GET 设置?

express - 使用 Jest 测试 ExpressJS 端点

javascript - 为什么我的应用程序没有到达 console.log?

javascript - 将 Node Express 服务器上长时间运行的异步函数的进度数据发送到 React 客户端

node.js - 如何使用 PM2 运行多个 package.json 脚本之一?

http - Varnish Via 和 X-Varnish header : are they needed in production?

azure - 如何设置单个 azure blob 请求的内容处置?