Мне нужно написать процессор, который потенциально может отправлять множество HTTP-запросов во внешнюю службу. Поскольку я хочу максимизировать производительность, я хочу минимизировать блокировку. Я использую PHP 5.6 и GuzzleHTTP.
GuzzleHTTP имеет опцию для асинхронных запросов. Но так как у нас есть только 1 поток, доступный в PHP, мне нужно выделить некоторое время для их обработки. К сожалению, я вижу только один способ сделать это - вызвать wait
, который блокирует, пока все запросы не будут обработаны. Это не то, что я хочу.
Вместо этого я хотел бы иметь какой-то метод, который обрабатывает все, что прибыл, а затем возвращает. Так что я могу сделать что-то вроде:
$allRequests = [];
while ( !checkIfNeedToEnd() ) {
$newItems = getItemsFromQueue();
$allRequests = $allRequests + spawnRequests($newItems);
GuzzleHttp::processWhatYouCan($allRequests);
removeProcessedRequests($allRequests);
}
Возможно ли это?