在Node js中。我可以使用“请求”包发送多少个同时请求

时间:2016-04-14 00:40:29

标签: node.js request

我可以使用request包同时发出多少个请求? 我期待从每个请求返回数据,确认请求已成功收到并处理。这个硬件或操作系统是否依赖?我从哪里开始寻找?

1 个答案:

答案 0 :(得分:3)

更新版本的node.js之一不对传出请求强制实施限制(旧版本确实如此)。如果您真的试图同时创建数百万个传出连接,那么您可能会在您自己的node.js服务器上达到限制,该服务器将是特定于操作系统的。但是,实际限制更有可能由目标主机决定。

由于您的所有请求都被发送到同一主机,因此更可能的限制将由您发出请求的服务器确定。它会在开始拒绝新连接之前同时“在飞行中”同时发出多少请求,这将有某种限制。这个数字取决于服务器的配置和构建方式。对于http://www.google.com,该数字可能是数十万或数百万个请求,因为它们具有庞大的服务器场,并且所有请求都是平衡的。对于一些简单的单CPU服务器,限制显然会远小于此。

此外,无论如何,将数以万亿计的请求发送到单个CPU服务器几乎没有用处,因为它无论如何都无法同时处理所有这些请求。

因此,如果您想知道哪种方法最适合给定的目标主机,您必须设置一个可调节的测试工具,以便测试从1,2,5,10,50,100发送的方案,每次200,500,1000,看看平均响应时间是什么以及开始出错的地方(如果有的话)。

如果您不想进行任何类型的测试,那么不尝试完全优化事物的合理安全选择是同时在飞行中提出不超过5个请求。

您可以自己构建一些东西来管理一次飞行中的N个请求,也可以使用现有的一个库来执行此操作。 Bluebird promise库对Promise.map()等函数有一些concurrency选项,无论你设置的是什么并发值,它都会自动为你做这个。 async library也有类似的东西。

如果您想要更具体的帮助来制作代码以管理一次有多少请求或为其构建测试工具,请向我们展示一些代码以获取所有请求的来源,以便我们有一些想法如何工作(如果它是一个巨大的请求数组或URL的来源是什么)。