我最近在我的应用程序中遇到了 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
,以及何时应该关闭它。
设置
keepAlive: true
为多个请求重用套接字,这有助于避免耗尽操作系统的临时端口。缺点是套接字保持打开状态,但这通常有利于性能。默认
keepAlive: false
通过关闭套接字来最大限度地减少资源使用,这适用于较少或不太频繁的请求。在发出许多快速请求时,建议使用 keepAlive 以减少端口耗尽错误。