使用PHP和Linux更好地支持CURL

时间:2008-12-11 22:15:42

标签: php mysql linux curl curl-multi

我是twittertrend.net的开发者,我想知道除了做curl_multi之外是否有更快的方法来获取URL的标题?我每分钟处理超过250个URL,从PHP的角度来看,我需要一种非常快速的方法来实现这一点。可以使用bash脚本然后输出标题或C应用程序,任何可能更快的东西?我主要只用PHP编程,但我可以学习。目前,CURL_MULTI(一次提供6个URL,做得不错,但我更喜欢更快的东西? 最后,我想坚持使用PHP进行任何MySQL存储和处理。

谢谢, 詹姆斯哈蒂格

7 个答案:

答案 0 :(得分:2)

我最近写了一篇关于如何加速curl_multi的博客文章。基本上我会在每个请求完成后立即处理它们并使用队列来保持大量请求一次进行。我用这种技术取得了很大的成功,并且每分钟使用它来处理~6000个RSS提要。我希望这有帮助!

http://onlineaspect.com/2009/01/26/how-to-use-curl_multi-without-blocking/

答案 1 :(得分:1)

获取网址标头的最简单方法是使用get_headers()。性能明智我不认为你可以击败curl_multi,但尝试基准测试并看到。这很难说。

答案 2 :(得分:1)

re:threading-via-bash-script,这是可能的,但不太可能:这样的脚本的进程创建开销可能会降低速度。

如果是您的导入,请启动一个只执行此类解决方案的守护程序,然后在本地连接到该守护程序。然后,您可以使用C或C ++或其他任何方法尽快制作该守护进程。

答案 3 :(得分:1)

curl_multi +这些选项可能是你最好的选择:

curl_setopt ($ch, CURLOPT_HEADER, 1);
curl_setopt ($ch, CURLOPT_NOBODY, 1);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);

唯一的另一个选择可能是使用wget with

--server-response

然后使用C / C ++,Java等多线程。我不相信这最终会成为一个更快的选择。

答案 4 :(得分:1)

我认为你需要一个多进程批量URL获取守护进程。 PHP不支持多线程,但没有什么可以阻止您生成多个PHP守护进程。

话虽如此,PHP缺乏适当的垃圾收集器意味着长时间运行的进程可能会泄漏内存。

运行一个守护进程,该守护进程会生成许多实例(一个可配置但受控制的数字)的php程序,这当然必须能够读取工作队列,获取URL并以一种方式写出结果是多过程安全的;多个过程不应该最终尝试做同样的工作。

您希望所有这些都作为守护进程自动运行,而不是从Web服务器运行。真。

答案 5 :(得分:0)

如果你不介意进入真正低级别的东西,你可以使用套接字函数发送流水线的原始HTTP 1.1请求。

有助于了解您目前使用的瓶颈在哪里 - 网络,CPU等......

答案 6 :(得分:0)

好吧,我想出了以下几点: 每个URL get_headers = .0606秒 每个URL的cURL = .01235 gethostbynamel = .001025秒每个网址

我要做的是首先运行gethostbynamel()然后运行cURL,这会减少时间,因为它会一直解析主机,因此cURL不会被卡住加载网址。 / p>

有异议吗?