タイトルが示すように、リクエストを作成して何らかの情報を返すPHP
スクリプトに対して作成できる非同期リクエストの数、またはハードウェアに依存する場合はおおよその数です。CURL
例えば:
AJAXJavascript
を介して同じ PHP スクリプトに対して非同期の get 要求を作成し、返された結果を配列に格納するループで 50 回実行されます。
CURL
そのようなリクエストを合理的にいくつ作成できるか、またはサーバーが一度に 1 つのリクエストしか考えられないか?
タイトルが示すように、リクエストを作成して何らかの情報を返すPHP
スクリプトに対して作成できる非同期リクエストの数、またはハードウェアに依存する場合はおおよその数です。CURL
例えば:
AJAXJavascript
を介して同じ PHP スクリプトに対して非同期の get 要求を作成し、返された結果を配列に格納するループで 50 回実行されます。
CURL
そのようなリクエストを合理的にいくつ作成できるか、またはサーバーが一度に 1 つのリクエストしか考えられないか?
あなたが探しているのは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);
}
}
私のサイトの 1 つでそれを使用して約 50 の URL をダウンロードしていますが、完全に機能します。もちろん、それはすべてスクリプトに割り当てられたメモリに依存します。URL によってスクリプトが長時間ハングしないように、タイムアウトを設定することもできます。
編集:実際にあなたの質問に答えるには、この関数に入力できる URL の数の制限がいくらかわかりません。接続速度に応じてサーバーごとに異なると思います。また、結果に対してプロセッサを集中的に使用する場合は、メモリとおそらく CPU によって異なります。しかし、そうは言っても、すべてのリクエストが同じリモート サーバーに対して行われている場合、その構成によってはボトルネックの問題が発生する可能性があります。これは、PHP の複数の cURL リクエストを使用しているか、AJAX を使用しているかに関係ありません。すべての Web サーバーは、同じスクリプトに対する多くの同時要求を処理するように作られていますが、次のいずれかの状況で問題が発生する可能性があります。