正如标题所述:对于发出PHP
请求并返回某些信息的CURL
脚本可以进行的异步请求的数量是多少,或者如果硬件依赖,则是近似数字。
例如:
一段Javascript
在循环中运行50次,通过AJAX将异步获取请求发送到同一个PHP脚本,并在返回时将结果存储在数组中。
可以合理地做出多少此类请求,或者服务器一次只能考虑一个CURL
请求?
答案 0 :(得分:3)
您正在寻找的是curl_multi_*功能。一个例子是这样的:
//create the multiple cURL handle
$mh = curl_multi_init();
// Loop over pages and get set the URL to the cURL queue
foreach ($urls as $url) {
// Get a cURL handle of the current URL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
// Set all your other curl_setopt() options here for the transfers
// Success
if (gettype($ch) == 'resource' && get_resource_type($ch) == 'curl') {
curl_multi_add_handle($mh, $ch);
}
}
// Execute the handles
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && $mrc == CURLM_OK) {
if (curl_multi_select($mh) != -1) {
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
我在我的一个网站上使用它来下载大约50个网址,它完美无缺。当然,这一切都取决于脚本的已分配内存。您还可以设置超时,以便没有URL可以使您的脚本挂起太长时间。
编辑:要实际回答您的问题,我不确定您可以输入此功能的网址数量限制是多少。我相信它会因服务器而异,具体取决于连接速度,内存以及可能的CPU,如果你正在对处理器密集的事情进行处理。但话虽如此,如果所有请求都发送到同一个远程服务器,您可能会遇到瓶颈问题,具体取决于其配置。这与您使用PHP多个cURL请求还是使用AJAX无关。即使是同一个脚本,所有Web服务器都可以处理许多并发请求,但您仍然可以遇到以下任何一种情况的问题: