使用PHP和Linux更好地支持CURL
我是twittertrend.net的开发者,我想知道除了使用curl\u multi之外,是否还有更快的方法来获取URL的标题?我每分钟处理250多个URL,从PHP的角度来看,我需要一种非常快速的方法来实现这一点。要么使用bash脚本,然后输出头文件,要么使用C应用程序,还有什么更快的吗?我基本上只使用PHP编程,但我可以学习。目前,CURL_MULTI(一次提供6个URL)还可以,但我更喜欢更快的? 最后,我想坚持使用PHP进行任何MySQL存储和处理 谢谢,使用PHP和Linux更好地支持CURL,php,mysql,linux,curl,curl-multi,Php,Mysql,Linux,Curl,Curl Multi,我是twittertrend.net的开发者,我想知道除了使用curl\u multi之外,是否还有更快的方法来获取URL的标题?我每分钟处理250多个URL,从PHP的角度来看,我需要一种非常快速的方法来实现这一点。要么使用bash脚本,然后输出头文件,要么使用C应用程序,还有什么更快的吗?我基本上只使用PHP编程,但我可以学习。目前,CURL_MULTI(一次提供6个URL)还可以,但我更喜欢更快的? 最后,我想坚持使用PHP进行任何MySQL存储和处理 谢谢, James Hartig获取
James Hartig获取URL标题的最简单方法是使用。从性能角度看,我认为你无法击败curl\u multi,但请尝试对其进行基准测试,然后看看。这很难说。如果你不介意进入真正的低级内容,你可以使用套接字函数发送流水线原始HTTP 1.1请求
了解您当前使用的网络、CPU等方面的瓶颈在哪里会有所帮助。re:通过bash脚本执行线程,这是可能的,但不太可能的:这样一个脚本的进程创建开销可能会降低速度
如果你是那个导入,启动一个除了这个解决方案什么都不做的守护进程,然后在本地连接守护进程。然后你可以让守护进程尽可能快地运行,在C或C++中或者任何。
curl_setopt ($ch, CURLOPT_HEADER, 1);
curl_setopt ($ch, CURLOPT_NOBODY, 1);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
唯一的其他选择可能是将wget与
--server-response
然后使用C/C++、Java等实现多线程。我不相信这最终会是一个更快的选择。好吧,我得出以下结论: get_头=每个URL 0.0606秒 cURL=每个URL 0.01235 gethostbynamel=每个URL 0.001025秒 我要做的是首先运行gethostbynamel(),然后运行cURL,这应该会减少时间,因为它会一直解析主机,因此cURL不必在加载url时陷入困境
有什么异议吗?我认为您需要一个多进程批量URL获取守护进程。PHP不支持多线程,但没有什么可以阻止您生成多个PHP守护进程 话虽如此,PHP缺少合适的垃圾收集器意味着长时间运行的进程可能会泄漏内存 运行一个守护进程,该守护进程生成大量php程序实例(一个可配置但受控的数量),当然,它必须能够以多进程安全的方式读取工作队列、获取URL和写入结果;多个进程不应该尝试做同一项工作
你会希望所有这些都作为守护进程自动运行,而不是从web服务器运行。真的。我最近写了一篇关于如何加速curl\u multi的博客文章。基本上,我会在每个请求完成后立即处理它,并使用一个队列来保持大量请求同时运行。我在这项技术上取得了很好的成功,并正在使用它来解决问题每分钟处理约6000个RSS源。我希望这有帮助
好的,我将首先研究守护进程的想法,看看是否可以更快地到达任何地方。我可能最终不得不留在curl\u multi。另一个问题是,我无法从curl\u multi获得连接时间或其他任何信息,只能获得响应。