使用PHP curl_multi的异步/并行HTTP请求

时间:2010-02-12 17:35:33

标签: php asynchronous curl parallel-processing curl-multi

我最近研究了使用curl发出多个请求的可能性。我可能没有完全理解它,所以我只是希望澄清一些概念。

如果您从多个来源获取内容,这绝对是一个不错的选择。这样,您可以从更快的服务器开始处理结果,同时仍然等待较慢的服务器。如果您从同一台服务器请求多个页面,是否仍然有意义使用它?服务器当时是否仍然为同一个客户端提供多个页面?

4 个答案:

答案 0 :(得分:4)

您不能在PHP中执行多线程,因此在其他页面仍在检索时您将无法开始处理一个页面。在检索到所有页面或超时之前,多卷曲不会返回控制。因此,需要花费尽可能长的时间来检索最慢的页面。你将从串行(curl)转向并行(multi_curl),这仍然会给你带来很大的推动。

服务器将为同一客户端提供多个页面,直至达到某个配置限制。从服务器请求5-10页就可以了。

答案 1 :(得分:1)

检查this out,这个人制作了一个与curl_multi异步的脚本。我已经玩了几个小时了,它工作正常。

答案 2 :(得分:0)

认为大多数或所有服务器一次只能向同一个客户端提供多个页面。您可以为连接设置合理的超时,然后如果连接失败,将其推送到连接阵列,以便在所有其他连接完成后重试。这样你就可以一次至少获得一个,即使它总是试图得到几个。那有意义吗? :)

答案 3 :(得分:0)

如果有太多的连接或请求来自它认为是同一个客户端,那么某些服务器可能被配置为防御性地行为。它可能会执行诸如放弃/拒绝连接,限制所有连接之间的某些总计带宽或其他内容的带宽。

无论如何,要考虑到您希望将网络爬虫考虑到您的网站,并尽量不要同时轰炸一台服务器。

如果您需要从5个不同的服务器获取5个页面,如果您在完成之前使用1个连接到每个服务器,那么您将更有可能完成更快,而不是在完成之前与1个服务器建立5个连接。 / p>