HttpRequestPoolクラスは解決策を提供します 。これを指摘してくれた人々に感謝します。
簡単なチュートリアルはhttp://www.phptutorial.info/?HttpRequestPool-constructにあります。
問題
PHP で同時/並列/同時 HTTP リクエストを作成したいと思います。次のような連続したリクエストを避けたい:
- 一連の要求が完了するまでに時間がかかりすぎます。リクエストが多いほど長くなる
- セットの途中で 1 つのリクエストがタイムアウトすると、それ以降のリクエストが作成されない場合があります (スクリプトに実行時間制限がある場合)。
cURL を使用して PHP で同時に [sic] HTTP リクエストを作成する方法の詳細を見つけることができましたが、可能であればPHP のHTTP 関数を明示的に使用したいと考えています。
具体的には、データを一連の URL に同時に POST する必要があります。データが投稿される URL は、私の管理外です。それらはユーザー設定です。
応答を処理する前に、すべての要求が完了するのを待つ必要があるかどうかは気にしません。各リクエストに 30 秒のタイムアウトを設定し、リクエストが同時に行われた場合、すべてのリクエストが完了するまで最大 30 秒 (おそらくもう少し) 待たなければならないことがわかります。
これがどのように達成されるかについての詳細は見つかりません。しかし、私は最近、PHP5+ が同時 HTTP リクエストを処理できるという PHP のマニュアルで言及されていることに気付きました。
単一のリクエストの例 (正常に動作します)
<?php
$request_1 = new HttpRequest($url_1, HTTP_METH_POST);
$request_1->setRawPostData($dataSet_1);
$request_1->send();
?>
同時リクエストの例 (不完全、明確)
<?php
$request_1 = new HttpRequest($url_1, HTTP_METH_POST);
$request_1->setRawPostData($dataSet_1);
$request_2 = new HttpRequest($url_2, HTTP_METH_POST);
$request_2->setRawPostData($dataSet_2);
// ...
$request_N = new HttpRequest($url_N, HTTP_METH_POST);
$request_N->setRawPostData($dataSet_N);
// Do something to send() all requests at the same time
?>
どんな考えでも大歓迎です!
明確化 1 : PECL HTTP 関数に固執したい:
- 彼らは素晴らしいOOPインターフェースを提供します
- それらは問題のアプリケーションで広く使用されており、すでに使用されているものに固執することは、メンテナンスの観点から有益であるはずです
- 一般に、cURL を使用する場合と比較して、PECL HTTP 関数を使用して HTTP 要求を行うために記述するコードの行数が少なくて済みます。コードの行数が少ないことは、メンテナンスの観点からも有益です。
明確化 2 : PHP の HTTP 関数が組み込まれていないことに気付きました。おそらく、間違った表現をしたので、訂正します。人々が余分なものをインストールしなければならないという心配はありません。これは配布されるアプリケーションではなく、それ自体がサーバーを持つ Web アプリケーションです。
明確化 3 : PECL HTTP はこれを行うことができないと誰かが正式に述べている場合、私は完全に満足しています。