使用PHP和Linux更好地支持CURL

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

谢谢,James Hartig

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

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

运行一个守护进程,这个守护进程会产生大量php程序的实例(一个可配置但受控制的编号),当然这个实例必须能够读取一个工作队列,获取这个URL,过程安全; 多个过程不应该最终尝试做同样的工作。

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

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

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

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

重新:线程通过bash脚本,这是可能的,但不太可能:这种脚本的进程创建开销可能会杀死速度。

如果是这样的导入,启动一个除此类解析之外什么都不做的守护进程,然后在本地连接守护进程。 然后你可以尽可能快地使用C或者C ++或者其他方法来使这个守护进程工作。

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

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

唯一的其他选择可能是使用wget

 --server-response 

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

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

这将有助于了解目前所使用的瓶颈在哪里 – 网络,CPU等等。

好了,我计算出以下内容:get_headers = .0606 sec per URL cURL = .01235 per URL gethostbynamel = .001025 sec per URL

我要做的是首先运行gethostbynamel(),然后cURL,这应该减少时间,因为它会一直解析主机,因此cURL将不会卡住加载一个url。

有什么异议?