У меня есть ситуация, когда у меня есть цикл, который собирается читать порцию данных из файла, отправлять эти порции в остальные API и продолжать до EOF, но я хочу, чтобы это было асинхронно внутри цикла,поэтому мне не нужно ждать ответа API для чтения следующего фрагмента.Я смотрю на Amphp и ReactPHP, потому что не могу найти решение этой проблемы, или, возможно, я не понимаю, как эти библиотеки должны использоваться.вот псевдо того, что я делаю.
<?php
while($file.read()){
$chunk = getNextChunk();
sendChunkAsync($chunk);
}
function getNextChunk(){
echo "reading next chunk";
// read next chunk of data
}
образец с amphp
function sendChunkAsync($chunk){
Loop::run(function () {
$uri = "https://testapi.com/api";
$client = new DefaultClient;
try {
$promises = $client->request($uri);
$responses = yield $promises;
echo "chunk processed";
} catch (Amp\Artax\HttpException $error) {
// log error
// $error->getMessage() . PHP_EOL;
}
});
}
В этом случае я бы ожидал (если чтение чанка происходит быстрее, чем получение ответа от API) что-то вроде этого, не принимайте эту литературу, я пытаюсь проиллюстрировать это для вас.
Чтение следующего чанка
Чтение следующего чанка
Чанк обработан
Чтение следующего чанка
Чанк обработан
чанкобрабатываются