gpt4 book ai didi

php - 对 Amazon Firehose 的异步请求

转载 作者:行者123 更新时间:2023-12-02 00:37:49 28 4
gpt4 key购买 nike

是否可以异步向 AWS 发送请求?在真正意义上。

如果我尝试以某种方式发送消息,则消息未送达:

      $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 发送请求,而不是等待答案。

最佳答案

您的问题的最佳解决方案是使用事件循环实现,例如 ReactPHP。

不幸的是,Guzzle(更好的说法是 cURL 本身)不兼容开箱即用的事件循环。

我个人通过实现 bridge 解决了同样的问题运行 Guzzle 查询事件循环友好。请看一下 the examples .

所以代码可能是这样的:

run(function ($loop) use ($genFn) {
$httpHandler = new CurlMultiHandler($loop);
$stack = HandlerStack::create($httpHandler);

$httpClient = new Client([
'handler' => $stack,
]);

$promise = $httpClient->getAsync('https://google.com')->then(
function ($result) { echo 'Query completed!'; },
function ($reason) { echo 'Query failed.'; }
);

/*
* The promise isn't completed yet, but the event loop will take care of it.
* We don't need to call Promise::wait()!
*/
});

关于php - 对 Amazon Firehose 的异步请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41103007/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com