【问题标题】:Making CURL multi requests to the same server as slow as single request向同一服务器发出 CURL 多个请求与单个请求一样慢
【发布时间】:2012-06-26 17:23:18
【问题描述】:

我正在使用a good Multi CURL interface called Rolling CURL

http://code.google.com/p/rolling-curl/issues/detail?id=20

它运行良好,例如它在大约 3 秒内从 20 个站点获取数据。问题是我需要它在同一服务器上的 200 - 300 个站点上工作。这与在循环中发出单个 CURL 请求所需的时间大致相同,大约为 10 分 47 秒。所以我有点不知道该怎么做。我需要做的就是获取每个站点上的 HTTP 代码。我尝试过 file_get_contents、PHP FTP 函数,它们的速度要慢得多。

另一件事是,当我在同一服务器上运行 12 个以上域的列表时,它似乎阻止了请求,所以我根本没有在任何站点上获取任何数据。当我运行少于 12 个的列表时,不会出现此问题。我只获取站点的标题数据,所以它不应该那么慢。

如果有人可以帮助我或详细解释为什么会发生这种情况,并提供有关如何克服此问题的指示,我将非常感激。

【问题讨论】:

  • 您是否已将主机记录添加到您的服务器以防止 DNS 查找?
  • @hakre 我使用了 curl no body 技巧并循环运行它,它对于 295 个域来说太慢了,花费的时间是 10 分 57 秒。
  • ~11 秒 295 个请求对我来说听起来并不慢。
  • @petah 我不是服务器维护和保养方面的专家,所以你必须为我分解一下。

标签: php multiple-domains curl-multi


【解决方案1】:

听起来库正在限制每个服务器的并发请求。看看你是否可以配置它。例如。这是在source-code 中,也是原因的描述:

class RollingCurl {
    /**
     * @var int
     *
     * Window size is the max number of simultaneous connections allowed.
     *
     * REMEMBER TO RESPECT THE SERVERS:
     * Sending too many requests at one time can easily be perceived
     * as a DOS attack. Increase this window_size if you are making requests
     * to multiple servers or have permission from the receving server admins.
     */
     private $window_size = 5;

这可能对你来说很有趣:

要获取状态码,通常只需一个 HEAD 请求即可,cUrl 支持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 2016-11-22
    • 1970-01-01
    • 2016-07-30
    相关资源
    最近更新 更多