我尝试在http.request
上使用http.Agent({ keepAlive: true})
来保持连接为将来的请求打开。
我创建了一个简单的服务器来记录每个新连接,但是当我运行我的 * request.js * 时,服务器记录了两个新连接。
我如何使用HTTP keep-alive与Node.js原生模块?
request.js:
const http = require("http");
const agent = new http.Agent({
keepAlive: true
});
var req1 = http.request({
agent: agent,
method: "GET",
hostname: "localhost",
port: 3000
}, function (res1) {
console.log("REQUEST_1");
var req2 = http.request({
agent: agent,
method: "GET",
hostname: "localhost",
port: 3000
}, function (res2) {
console.log("REQUEST_2");
});
req2.end();
});
req1.end();
server.js:
const http = require('http');
var server = http.createServer(function (req, res) {
res.end('OK');
console.log("REQUEST");
})
server.on('connection', function (socket) {
console.log("NEW CONNECTION");
})
server.listen(3000);
输出:
NEW CONNECTION
REQUEST
NEW CONNECTION
REQUEST
3条答案
按热度按时间wnavrhmk1#
按如下方式设置
maxSockets
选项:默认情况下,
maxSockets
设置为Infinity
-https://nodejs.org/api/http.html#http_new_agent_options节点v10上的完整示例
gajydyqb2#
可接受的答案并没有明确说明发布的代码将只允许每个主机每个线程同时 * 一个 * 请求。
这通常不是您想要的,并且将导致请求变慢,等待前一个请求完成。
xcitsw883#
从Node.js v19开始,
keepAlive
选项对于所有传出HTTP连接默认设置为true。您可以在Node.js的v19文档中阅读更多相关信息。