gpt4 book ai didi

node.js - 与 Superagent 保持连接

转载 作者:搜寻专家 更新时间:2023-11-01 00:10:49 26 4
gpt4 key购买 nike

我正在运行一个 node.js 服务器 A,它使用 superagent 向另一个服务器 B 发出 HTTP 请求。

我调查了服务器 B 上的请求,发现 header connectionclose 并且 httpVersion 为 1.1:

var http = require('http');
var request = require('superagent');

http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write('req.httpVersion seen on server:' + req.httpVersion);
res.write('\nreq.headers.connection seen on server:' + req.headers.connection);
res.end();
}).listen(1337, '0.0.0.0');

request
.get('localhost:1337/helloword')
.end(function (err, res) {
console.log(res.text);
});

这导致:

req.httpVersion seen on server:1.1
req.headers.connection seen on server:close

但是,如果我从浏览器访问同一台服务器,我会得到:

req.httpVersion seen on server:1.1
req.headers.connection seen on server:keep-alive

来自 https://www.rfc-editor.org/rfc/rfc2616#page-172我了解到 keep-alive 是 HTTP 1.1 的默认值,除非使用 Connection: close 另行声明。

所以,我的问题是:

  • 为什么 Superagent/Node.js 明确设置请求不使用保持事件/持久连接?<​​/li>
  • 如何强制 Superagent/Node.js 使用保持连接?
  • 我如何进一步影响确切的行为(保持打开的连接数、超时等)?

最佳答案

它似乎没有记录,但您可以使用函数 agent 将 http 代理传递给 superagent。所以你可以用这个模块创建一个保持事件代理:https://www.npmjs.org/package/agentkeepalive并将其传递给 super 代理。

像这样:

util = require('util');
util.debuglog = require('debuglog');
var http = require('http');
var request = require('superagent');
var Agent = require('agentkeepalive');

var keepaliveAgent = new Agent({
maxSockets: 100,
maxFreeSockets: 10,
timeout: 60000,
keepAliveTimeout: 30000 // free socket keepalive for 30 seconds
});

http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write('req.httpVersion seen on server:' + req.httpVersion);
res.write('\nreq.headers.connection seen on server:' + req.headers.connection);
res.end();
}).listen(1337, '0.0.0.0');

request
.get('localhost:1337/helloword')
.agent(keepaliveAgent)
.end(function (err, res) {
console.log(res.text);
});

关于node.js - 与 Superagent 保持连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20743546/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com