正如标题所述:可以对PHP
发出请求并返回一些信息的脚本发出的异步请求的数量是多少CURL
,或者如果取决于硬件,则为近似数量。
例如:
一段Javascript
循环运行 50 次,通过 AJAX 向同一个 PHP 脚本发出异步获取请求,并在返回结果时将结果存储在数组中。
可以合理地发出多少这样的请求,或者服务器一次只能考虑一个CURL
请求?
正如标题所述:可以对PHP
发出请求并返回一些信息的脚本发出的异步请求的数量是多少CURL
,或者如果取决于硬件,则为近似数量。
例如:
一段Javascript
循环运行 50 次,通过 AJAX 向同一个 PHP 脚本发出异步获取请求,并在返回结果时将结果存储在数组中。
可以合理地发出多少这样的请求,或者服务器一次只能考虑一个CURL
请求?
您正在寻找的是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,它运行良好。当然,这完全取决于为您的脚本分配的内存。您还可以设置超时,以便没有任何 URL 可以使您的脚本挂起太久。
编辑:要实际回答您的问题,我不确定您可以输入此函数的 URL 数量的限制是多少。我相信它会因服务器而异,具体取决于连接速度,内存和可能的 CPU,如果你正在做一些处理器密集型的结果。但是话虽如此,如果所有请求都发送到同一个远程服务器,您可能会遇到瓶颈问题,具体取决于其配置。这与您是使用 PHP 多 cURL 请求还是 AJAX 无关。即使对同一个脚本,所有 Web 服务器都可以处理许多并发请求,但您仍然可能遇到以下任何情况的问题: