PHP向数百个网站发送帖子请求的最佳方式?

时间:2011-08-28 00:54:08

标签: php multithreading wordpress post parallel-processing

我尝试过使用Rolling Curl,Epi Curl和其他PHP多卷曲解决方案,将发布请求发送到JUST 40站点并接收数据平均需要180秒(我正在谈论从他们那里收到一小部分成功/失败的字符串),那就是狗慢!!!“

只有1个帖子请求就好了,就像3-6秒一样,我甚至不知道这是不是很好,因为我看到其他人在谈论得到1秒的回复,这很疯狂。

我也尝试使用proc_open来运行linux shell命令(curl,wget),但这也很慢,而且不是服务器友好的。

我正在努力做的是一个Wordpress插件,它能够管理多个Wordpress网站并进行大规模升级,远程发布,博客管理等。我知道有一个名为managewp.com的网站,但我不想使用他们的服务,因为我想保持我管理的网站私密并开发自己的网站。我注意到的是他们的请求/响应速度非常快,我只是对他们如何能够做到这一点感到困惑,特别是对于数百个站点。

那么有人可以说明如何更快地提出这些发布请求吗?

修改

我一直在思考,我问自己,“获取响应有什么重要意义?不像发送的请求没有得到正确处理,它们都有99%的时间都在做!”

所以我想也许我可以在没有收到回复的情况下发送所有请求。如果我真的想要跟踪这些进程及其进展情况,我可以让这些子站点发回一个帖子请求,其中包含进程的状态,并让主站点将它们添加到数据库表中并拥有ajax请求查询大约每10秒左右进行状态更新或类似的事情......听起来怎么样?

2 个答案:

答案 0 :(得分:0)

cUrl每次请求大约需要0.6到0.8秒

因此对于大约500个网站,可能需要300到400秒。

你可以通过循环来鞭打它。

$ch = curl_init(); // Init cURL

curl_setopt($ch, CURLOPT_URL, "http://www.example.com/post.php"); // Post location
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 1 = Return data, 0 = No return
curl_setopt($ch, CURLOPT_POST, true); // This is POST

// Our data
$postdata = array(
    'name1' => 'value1',
    'name2' => 'value2',
    'name3' => 'value3',
    'name4' => 'value4'
);

curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); // Add the data to the request

$o = curl_exec($ch); // Execute the request

curl_close($ch); // Finish the request. Close it.

这还取决于您的连接速度。从数据中心来看应该没问题,如果从家里进行测试可能会得到不太好的结果。

答案 1 :(得分:-3)

我目前正在开发一个项目,使用PHP和curl_multi一次下载数百个URL。 批量最多250个网址并与CURLOPT_TIMEOUTCURLOPT_CONNECTTIMEOUT一起使用,以优化代码的速度。

我有一个cURL类(2500多行)处理所有cURL魔法,包括多文件和直接文件下载。使用体面超时250个URL / 15-25秒。 (但我不是免费分享它......)

PS 下载许多网址需要使用临时文件作为cURL下载目标而不是内存。只是一个想法......