当达到maxSockets时,node.js会发生什么?

7

我想知道当达到maxSockets时会发生什么?

如果我正在使用一个允许我创建自定义http.Agent的服务,并且我将maxSockets指定为1。当我尝试发出多个并发请求时会发生什么?

每个请求是否都会超过初始阻塞,直到初始请求完成?然后该套接字将可用于下一个请求?而所有其他请求都会阻塞吗?我当然认为是这样,但在文档中没有找到任何具体信息,并且我对套接字编程还很陌生。

1个回答

8

当maxSockets被使用时,额外的请求将被排队, 直到有一个活动请求完成并释放出一个可用的套接字,此时来自队列的挂起请求将会在新释放的套接字上发送。

请注意,这实际上是排队而不是阻塞 - 在此过程中,CPU和事件循环继续执行有用的工作。

还请注意,每个源(“主机:端口”)都有一个maxSockets和队列(类似于浏览器)。

还要注意默认的maxSockets为Infinity


感谢您的解释。您是否同意使用maxSockets为50,以及keepAlive:true,不应该导致对同一主机:端口组合的许多请求出现套接字耗尽(EMFILE错误)?在我的情况下,我遇到了EMFILE错误,并试图找出原因。 - Cameron Hudson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接