1

RESTful サーバーとやり取りする PHP クライアント アプリケーションがあります。クライアント上の各 PHP Goat インスタンスは、サーバー上の /goat リクエストの情報に基づいて自身を初期化する必要があります (例: /goat/35、/goat/36 など)。これは、cURL を介して対応する URL に HTTP 要求を送信することによって行われます。ページの読み込みごとに 30 以上のヤギ オブジェクトを処理することは、30 以上の HTTP リクエストに相当し、それぞれに 0.25 秒かかります。メモリ内の応答の遅延読み込みとキャッシュは役に立ちますが、十分ではありません。

foreach ($goats as $goat) {
   $goat->getName() // goat needs to hit the REST API
}

この手法の利点は、私のヤギがすべてスマートでカプセル化されていることです。欠点は、パフォーマンスがひどいことです。ヤギは HTTP リクエストをキューに入れる方法を知りません。あるヤギは、リクエストを開始する必要のある他のヤギがいるかどうかを知りません。1 つの代替手段として、ヤギを外部で構築することも考えられます。

$urls = array('http://', 'http://', ...);  // array of goat URLs
$result = fancy_pipelined_http_request_queue($urls);
foreach ($result as $xml) {
   $goat->buildSelfFromXML($xml);
}

これはよく知られた OO/REST のジレンマであり、より高度な解決方法があると確信しています。どこを見ればよいかわかりません。何か案は?

4

1 に答える 1

1

必要に応じて、ノンブロッキング ソケットを使用できます。これには、カールを脇に置く必要があるため、それらに切り替えるためのコーディングが少し必要です。ただし、リクエストを同時に実行できるため、パフォーマンスが向上する可能性があります。

socket_set_blocking / stream_set_blocking関数を参照してください。

于 2009-09-23T06:52:10.110 に答える