私の目的は、Guzzle 6を使用して、jsonデータをPUTする非同期要求のプールを作成することです。次に、$ promiseの成功/失敗を監視します。私のPOOLのコード例と比較するために Guzzle 6を使用してAPIエンドポイントに送信する非同期json要求のプールを作成する正しい方法は何ですか?
は、$クライアント - >リクエスト()を次のように単一の要求は、エンコードされたJSONに3番目のパラメータを変換し、コンテンツタイプ追加されます。アプリケーション/ JSONを**$client = new Client([
'base_uri' => BASE_URL . 'test/async/', // Base URI is used with relative requests
'timeout' => 0, // 0 no timeout for operations and watching Promises
]);
$response = $client->request('PUT', 'cool', ['json' => ['foo' => 'bar']]);
受信APIエンドポイント上
、私は、次の手順を実行して、上記の単一の要求からJSONを読むことができます:新しい要求を(使用してconcurrent requests example in the docs, for creating a Pool of asynchronous requestsを使用して
$json = file_get_contents('php://input');
$json = json_decode($json, true);
)、私が望んで上記の単一の$ client-> request()の例のように、同じパラメータ(メソッド、URLエンドポイント、jsonフラグ)を使用できます。しかし、yield new Request()
は$client->request()
のような3番目のjsonパラメータを処理しません。 jsonとcontent-typeを正しく設定するためにプールコードから呼び出す正しいGuzzle関数は何ですか?または、非同期要求の大きなプールを作成し、その結果を監視するより良い方法がありますか?
POOLコード例:
$this->asyncRequests = [
[
'endpoint' => 'cool'
],
[
'endpoint' => 'awesome'
],
[
'endpoint' => 'crazy'
],
[
'endpoint' => 'weird'
]
];
$client = new Client([
'base_uri' => BASE_URL, // Base URI is used with relative requests
'timeout' => 0 // 0 no timeout for operations and watching Promises
]);
$requests = function ($asyncRequests) {
$uri = BASE_URL . 'test/async/';
foreach ($asyncRequests as $key => $data) {
yield new Request('PUT', "{$uri}{$data['endpoint']}", ['json' => ['foo' => 'bar']]);
}
};
$pool = new Pool($client, $requests($this->asyncRequests), [
'concurrency' => 10,
'fulfilled' => function ($response, $index) {
$this->handleSuccessPromises($response, $index);
},
'rejected' => function ($reason, $index) {
$this->handleFailurePromises($reason, $index);
},
]);
$promise = $pool->promise(); // Initiate the transfers and create a promise
$promise->wait(); // Force the pool of requests to complete.
聖なるくそ!これを明確に説明してくれてありがとう! –