Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP和Linux更好地支持CURL_Php_Mysql_Linux_Curl_Curl Multi - Fatal编程技术网

使用PHP和Linux更好地支持CURL

使用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获取

我是twittertrend.net的开发者,我想知道除了使用curl\u multi之外,是否还有更快的方法来获取URL的标题?我每分钟处理250多个URL,从PHP的角度来看,我需要一种非常快速的方法来实现这一点。要么使用bash脚本,然后输出头文件,要么使用C应用程序,还有什么更快的吗?我基本上只使用PHP编程,但我可以学习。目前,CURL_MULTI(一次提供6个URL)还可以,但我更喜欢更快的? 最后,我想坚持使用PHP进行任何MySQL存储和处理

谢谢,
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获得连接时间或其他任何信息,只能获得响应。