2

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

谢谢,詹姆斯哈蒂格

4

7 回答 7

2

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

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

于 2009-01-27T01:42:25.217 回答
1

获取 URL 标头的最简单方法是使用get_headers()。性能方面,我认为您无法击败 curl_multi,但请尝试对其进行基准测试并查看。很难说。

于 2008-12-11T22:24:41.347 回答
1

回复:threading-via-bash-script,有可能,但不太可能:此类脚本的进程创建开销可能会降低速度。

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

于 2008-12-11T22:32:52.123 回答
1

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 等对其进行多线程处理。我不相信这最终会是一个更快的选择。

于 2008-12-11T22:36:09.903 回答
1

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

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

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

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

于 2008-12-12T05:27:09.900 回答
0

如果您不介意进入非常低级别的内容,您可以使用套接字函数发送流水线的原始 HTTP 1.1 请求。

了解您当前使用的瓶颈在哪里 - 网络、CPU 等会有所帮助...

于 2008-12-11T22:29:53.533 回答
0

好吧,我想出了以下几点: get_headers = 每个 URL 0.0606 秒 cURL = 每个 URL 0.01235 gethostbynamel = 每个 URL 0.001025 秒

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

有异议吗?

于 2008-12-12T01:54:32.107 回答