【发布时间】:2011-08-08 19:21:05
【问题描述】:
如果我运行一个标准的 cURL_multi_exec 函数(下面的示例),我会立即获得所有请求的 cURL 句柄。我想在每个请求之间延迟 100 毫秒,有没有办法做到这一点? (在 Google 和 StackOverflow 搜索中找不到任何内容)
我在 curl_multi_exec() 之前尝试过 usleep(),它会减慢脚本速度但不会推迟每个请求。
// array of curl handles & results
$curlies = array();
$result = array();
$mh = curl_multi_init();
// setup curl requests
for ($id = 0; $id <= 10; $id += 1) {
$curlies[$id] = curl_init();
curl_setopt($curlies[$id], CURLOPT_URL, "http://google.com");
curl_setopt($curlies[$id], CURLOPT_HEADER, 0);
curl_setopt($curlies[$id], CURLOPT_RETURNTRANSFER, 1);
curl_multi_add_handle($mh, $curlies[$id]);
}
// execute the handles
$running = null;
do {
curl_multi_exec($mh, $running);
} while($running > 0);
// get content and remove handles
foreach($curlies as $id => $c) {
$result[$id] = curl_multi_getcontent($c);
curl_multi_remove_handle($mh, $c);
}
// all done
curl_multi_close($mh);
我整天都在努力,任何帮助将不胜感激!谢谢。
编辑: 还有其他非 cUrl 方法吗?这也将回答我的问题。
【问题讨论】:
-
没有。 PHP 的 curl 支持不提供这种功能。
-
还有其他非 cUrl 方法吗?这也将回答我的问题。谢谢。
-
PHP 根本不是多线程的。您必须并行运行脚本的多个副本。并且脚本的每个副本都将完全独立于其他副本。你必须有一些方法告诉每个脚本它应该获取哪个 url
-
我知道 cURL multi 只是一个等待所有连接解决的线程。一个线程的类似解决方案将解决我的问题。我不想一次对任何具有 1000 个请求的服务器进行 DDoS,但我也不想一次运行一个请求(太慢)。
-
所有网址都在一个网站上吗?还是您要访问多个站点?如果是多个,则在每个多线程中点击一个站点,并在整个脚本上暂停 100 毫秒。即使您同时访问 5 或 10 个网站,它也会在每个网站上显示为每 100 毫秒 1 次。
标签: php multithreading curl delay curl-multi