Node 本身没有施加 TCP 连接限制。 (重点是它是高度并发的,可以处理数千个同时连接。)您的操作系统may限制 TCP 连接。
更有可能的是,您要么遇到了后端服务器的某种限制,要么遇到了内置 HTTP 库的连接限制,但如果没有有关该服务器或 Node 实现的更多详细信息,很难说。
节点内置HTTP 库(显然,任何建立在它之上的库,这是大多数)维护一个连接池(通过Agent类),以便它可以利用 HTTP keep-alive。当您向同一服务器运行多个请求时,这有助于提高性能:而不是打开 TCP 连接、发出 HTTP 请求、获取响应、关闭 TCP 连接并重复;可以在重用的 TCP 连接上发出新请求。
在节点 0.10 及更早版本中,HTTP 代理默认情况下只会打开到单个主机的 5 个同时连接。您可以轻松更改此设置:(假设您已经require
d HTTP 模块为http
)
http.globalAgent.maxSockets = 20; // or whatever
node 0.12设置默认值maxSockets
to Infinity
.
您可能希望保留某种连接限制。您不希望一秒钟内数百个 HTTP 请求完全压垮您的后端服务器 - 性能很可能比您只是让代理的连接池执行其操作(限制请求以免服务器过载)更差。最好的选择是运行一些实验,看看在您的情况下并发请求的最佳数量是多少。
然而,如果你真的不想要连接池,你可以简单地完全绕过连接池 – 发送agent
to false
在请求选项中:
http.get({host:'localhost', port:80, path:'/', agent:false}, callback);
在这种情况下,并发 HTTP 请求绝对没有限制。