【问题标题】:Is there a maximum number of Get requests?是否有最大数量的 Get 请求?
【发布时间】:2018-05-13 23:15:28
【问题描述】:

根据标题,Get 请求的数量是否有上限?

为了将数据动态加载到网页中,我需要向 rest API 发出几百个 get 请求,但我发现如果我创建一个 Promise.All 数组并在 .then 中输出承诺结果,最终我会得到由于请求超时而未定义。

这是由于连接数的限制吗?是否有同时发出大量请求的最佳做法?

感谢您的洞察!

【问题讨论】:

  • 这是您无法控制的。它完全依赖于 API 服务器。它们可能会造成限制。
  • 在浏览器中,您会发现到任何一个主机的最大并发连接数...但是,浏览器通常会将请求排队...如果您收到undefined - 它可能是您点击的 API 是否有某种速率限制?在这种情况下,您需要对请求进行速率限制,以免出错

标签: javascript jquery get promise xmlhttprequest


【解决方案1】:

接收服务器对于它可以处理多少并发请求具有特定的能力。它可能是一个很小的数字,也可能是一个很大的数字,这取决于一大堆事情,包括服务器配置、服务器软件架构、正在发送的请求类型等等......

如果您从服务器收到超时,那么您可能发送了足够多的请求,以至于在配置任何请求超时(在客户端或服务器上)之前服务器无法处理所有请求,因此您收到超时错误.

在客户端处理此问题的常用方法是控制一次同时发送多少个请求,然后当一个请求完成时,您可以发送下一个,依此类推。您必须进行测试以了解接收服务器的功能,然后您应该稍微退后一点,以便在您的请求运行时允许来自其他来源的其他负载有一些执行空间。

假设您的请求在服务器上不是异常繁重的事情,我通常会一次测试 5 或 10 个请求,然后看看接收服务器如何处理。

这里讨论了很多控制它的选项:

Promise.all consumes all my RAM

Make several requests to an API that can only handle 20 request a minute

并发控制也是Promise.map() in the Bluebird promise library的一部分。

是否有最大获取请求数?

由于各种原因,服务器一次可以处理多少个请求是有限的。每个服务器设置都可能不同,它还取决于您发送的请求类型(以及它们必须做什么)。一些服务器可能能够处理数十万个请求(可能是因为它们后面有一个集群并且它们被配置为大负载)。较小的配置一次只能处理几十个。

这是由于连接数的限制吗?

任何接收服务器都会对允许排队的传入连接数有限制。那是什么将取决于许多因素,并且您(从外部)无法确切知道该限制是什么。超时错误通常并不意味着您已达到此限制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 2014-02-11
    • 2011-02-09
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    相关资源
    最近更新 更多