我什么时候应该使用(或不使用)Node.js http Agent 的 keepAlive 选项?

问题描述 投票:0回答:2

我最近在我的应用程序中遇到了 Node.js http 客户端的问题,该客户端向远程 API 发出了如此多的请求,以至于耗尽了操作系统的可用临时端口,从而触发了某些请求的

connect EADDRNOTAVAIL
错误。我最终发现,我可以通过使用
http.Agent
发出请求来消除这个问题,并将 options
keepAlive: true
maxSockets
设置为某个合理的值。例如:

new http.Agent({keepAlive: true, maxSockets: 25})

此更改似乎消除了我的

EADDRNOTAVAIL
错误,而没有任何负面影响,但我对此持谨慎态度,因为
keepAlive
选项默认为
false
(而
maxSockets
默认为
Infinity
)。默认值为
false
的事实表明,设置
keepAlive: true
存在一些成本或缺点。我想了解它的缺点是什么,以便我了解在什么情况下应该打开
keepAlive
,以及何时应该关闭它。

node.js
2个回答
1
投票

将评论中的对话移至答案以结束问题。

keepAlive
重用套接字而不是为每个请求实例化新套接字,这里的“缺点”是即使您完成请求并继续通过网络进行通信,套接字也会存在。

这个“缺点”实际上是您正在寻找的功能。由于关闭它们然后重新打开它们会产生负面影响,因此您希望保持这些沟通渠道畅通。

为了进一步让某人(有同样问题的人)放心,正如 @mactyr 在上面的评论中指出的那样(并基于这篇操作博客文章),

keepAlive
是非侵入性的,可以打开没有做错事的风险。


0
投票

设置

keepAlive: true
为多个请求重用套接字,这有助于避免耗尽操作系统的临时端口。缺点是套接字保持打开状态,但这通常有利于性能。默认

keepAlive: false

通过关闭套接字来最大限度地减少资源使用,这适用于较少或不太频繁的请求。在发出许多快速请求时,建议使用 keepAlive 以减少端口耗尽错误。

© www.soinside.com 2019 - 2024. All rights reserved.