Ist es möglich, Anfragen asynchron an AWS zu senden? In der wirklichen Bedeutung.Asynchrone Anfrage an Amazon Firehose
Die Nachrichten wird nicht geliefert, wenn ich versuche, sie in einer Weise zu senden:
$firehose = new FirehoseClient($args);
/** @var Promise\Promise $promise */
$promise = $firehose->putRecordAsync($record);
$promise->then(function ($result) {
echo 'test';
});
aber wenn ich am Ende des Skripts hinzu:
$promise->wait()
es funktioniert, aber synchron. Gibt es eine Möglichkeit, es asynchron zu machen?
Ich habe auch versucht, einen anderen Handler zu verwenden:
$curl = new CurlMultiHandler();
$handler = HandlerStack::create($curl);
$args = [
'http_handler' => $handler,
'region' => '#REGION#',
'version' => 'latest',
'credentials' => $credentials,
'debug' => true
];
$firehose = new FirehoseClient($args);
while (!Promise\is_settled($promise)) {
$curl->tick();
}
Im Grunde funktioniert es, aber immer im Sync-Modus. Was ich brauche, ist eine Anfrage an AWS zu senden und nicht auf die Antwort zu warten.
php nicht asynchron ist können Sie versuchen, Kaninchen mq mit oder irgendwie Ihr Skript über cron Rufwarteschlange mit – bxN5
Ich weiß, dass PHP nicht async, aber es gibt eine curl Funktion: curl_multi_exec welche sollte eine Anfrage im Hintergrund senden können? Außerdem sollte ich die offizielle AWS-Dokumentation verstehen: https://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/promises.html. Es scheint, dass es eine Art von Async geben sollte. Bitte korrigieren Sie mich, falls ich falsch liege. – user1119698
@Roman, es gibt eine Möglichkeit, asynchronen Code mit Event-Loops in PHP zu schreiben, nachdem Generatoren (Coroutinen) hinzugefügt wurden. –