AWSに非同期でリクエストを送信することはできますか?本当の意味で。私は方法でそれを送信しようとしている場合Amazon Firehoseへの非同期リクエスト
メッセージが配信されていません。
$firehose = new FirehoseClient($args);
/** @var Promise\Promise $promise */
$promise = $firehose->putRecordAsync($record);
$promise->then(function ($result) {
echo 'test';
});
が、私は、スクリプトの最後に追加したとき:それが動作
$promise->wait()
が、同期的に。非同期にする方法はありますか?しかし、常に同期モードでは、
$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();
}
は基本的にそれが動作:
は、私はまた、別のハンドラを使用することを試みました。私が必要とするのは、AWSにリクエストを送信し、その答えを待つことではありません。
PHPを使用して、ウサギのMQを使用してみてくださいまたは何らかの形で私はPHPが非同期ではないことを知っているが、そこにあるキュー – bxN5
を使用してcronを介して、あなたのスクリプトを呼び出すことができます 非同期ではありませんcurl関数:curl_multi_execは、バックグラウンドでリクエストを送信できるはずですか?さらに、公式のAWSドキュメント(https://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/promises.html)をどのように理解する必要がありますか?何らかの非同期の方法があるはずです。私が間違っているなら、私を修正してください。 – user1119698
@Romanでは、ジェネレータ(コルーチン)を追加した後、PHPにイベントループを持つ非同期コードを書く可能性があります。 –