Mein Ziel ist es, Guzzle 6 zu verwenden, um einen Pool von asynchronen Anforderungen zu erstellen, die JSON-Daten PUT. Überwachen Sie dann jeden Erfolg/Misserfolg des Versprechens.Wie kann Guzzle 6 zum Erstellen eines Pools asynchroner JSON-Anforderungen zum Senden an API-Endpunkte verwendet werden?
Zum Vergleich zu meinem POOL Code Beispiel die folgende einfache Anfrage bei $ client-> request() wandelt den dritten Parameter in codierten json und fügt dann den Content-type:. Application/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']]);
Auf dem empfangenden API-Endpunkt, ich die json von der einzigen Anforderung oben, indem Sie folgende lesen:
$json = file_get_contents('php://input');
$json = json_decode($json, true);
mit dem concurrent requests example in the docs, for creating a Pool of asynchronous requests mit neuer Request(), hoffte ich, Die gleichen Parameter (Methode, URL-Endpunkt, JSON-Flag) könnten verwendet werden, wie im obigen Beispiel $ client-> request(). yield new Request()
verarbeitet jedoch nicht den 3. JSON-Parameter wie $client->request()
. Was ist die korrekte Guzzle-Funktion, die ich von meinem Pool-Code aus aufrufen soll, um json und den Inhaltstyp richtig einzustellen? Oder gibt es eine bessere Möglichkeit, einen großen Pool asynchroner Anfragen zu erstellen und deren Ergebnis zu überwachen?
POOL Codebeispiel:
$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.
Heilige Scheiße, wie lange es dauerte, dass Körper zu erkennen und json im 4. Parameter sein soll! Danke, dass du das so klar erklärst! –