gpt4 book ai didi

Superagent 中的 TCP session 重用

转载 作者:行者123 更新时间:2023-12-05 08:05:49 24 4
gpt4 key购买 nike

我正在使用 superagent,在检查网络时我注意到 superagent 正在为每个请求创建一个新的 TCP 连接。我将 superagent 用于一系列请求,这会导致大量 TCP 连接(可能达到数百个)。

我试着关注 this idea并使用 agentkeepalive 包但是这种方法有一些缺点:

  1. 虽然 superagent 可以开箱即用地使用 http 和 https,但需要根据协议(protocol)定义 agentkeepalive
  2. 作为上一节的结果,如果我执行一个重定向到 https 请求的 http 请求,我会得到一个错误,Protocol "https:"not supported。应为“http:”,因为协议(protocol)已更改。
  3. 作为第 2 部分的结果,应用程序因 uncaughtException 而崩溃(仅在重定向时发生,而不是在使用错误协议(protocol)时发生,即 https 请求的 http agentkeepalive )

不用说,使用 request.set('Connection', 'keep-alive'); 并没有解决它。

所以我的问题是:如何在使用 superagent 时重用 TCP 连接而不会出现重定向错误?除了 agentkeepalive 包之外,是否还有另一种解决方案可以在 superagent 中重用 TCP 连接?

最佳答案

使用这个库:https://www.npmjs.com/package/agentkeepalive您可以像这样将它与 superagent 集成:

const request = require('superagent');
const Agent = require('agentkeepalive');

const keepaliveAgent = new Agent({
maxFreeSockets: 50,
});

request.get('http//www.example.com/path')
.agent(keepaliveAgent);

在这个例子中,最大连接数是无穷大,但它最多保持 50 个空闲连接打开,默认保持事件超时设置(30 秒)

编辑:

关于使用 agentkeepalive 的 http 和 https 协议(protocol),我在我的案例中所做的是以下解决方法:

this.agent = new (baseUrl.toLowerCase().startsWith('https:')
? Agent.HttpsAgent
: Agent)(
{
maxFreeSockets: 50,
timeout: 60000,
freeSocketTimeout: 30000,
},
);

假设 baseUrl 将始终与此代理一起使用。虽然它可能不是开箱即用的协议(protocol),但它是一个非常简单的解决方案,我将它用作我所有 REST 客户端的基类

关于Superagent 中的 TCP session 重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63338001/

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