2010-02-12 24 views
1

我最近研究了使用curl进行多个请求的可能性。我可能不完全理解它,所以我只是希望澄清一些概念。使用PHP的异步/并行HTTP请求curl_multi

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

回答

4

您不能在PHP中执行多线程,因此您将无法在其他人正在检索时开始处理一个页面。在所有页面被检索或超时之前,多卷曲不会返回控制。因此,只需要检索最慢的页面即可。你将从串行(卷曲)到平行(multi_curl),这仍然会给你一个很大的提升。

服务器将为同一个客户端提供多个页面,达到一定的配置限制。从服务器请求5-10页会很好。

0

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

0

某些服务器可能配置为防御性行为,如果过多的连接或请求是从它认为是相同的客户端。它可能会执行诸如丢弃/拒绝连接,限制所有连接之间的某个总计带宽或其他事物的带宽。

无论如何,要体贴如你想要一个网络爬虫考虑到您的网站,并尽量不要一次性轰炸一台服务器。

如果您需要从5个不同的服务器中分别抓取5个页面,那么如果您直到完成,每个服务器使用1个连接,则直到完成5次连接才会完成。

1

检查this out,这个人做了一个脚本,它与curl_multi异步工作。我一直在玩几个小时,它运作良好。