1

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

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

4

4 回答 4

3

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

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

于 2010-02-12T22:50:34.177 回答
1

看看这个,这家伙做了一个与 curl_multi 异步工作的脚本。我已经玩了几个小时了,它运行良好。

于 2011-12-11T00:24:50.970 回答
0

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

于 2010-02-12T19:02:08.830 回答
0

如果从它认为是同一个客户端的连接或请求中发出过多的连接或请求,某些服务器可能会被配置为采取防御性行为。它可能会做一些事情,例如丢弃/拒绝连接、将带宽限制为所有连接之间的某个总和或其他事情。

无论如何,请考虑周到,就像您希望将网络爬虫考虑到您的网站一样,并尽量不要一次用太多东西轰炸单个服务器。

如果您需要从 5 个不同的服务器中获取 5 个页面,那么如果您使用 1 个与每个服务器的连接直到完成,您更有可能更快地完成,而不是您对 1 个服务器进行 5 个连接直到完成。

于 2010-02-12T22:01:28.193 回答