Здравствуйте.
В общем балуюсь с асинхронным исполнением php кода. Суть в чем... Есть скрипт, он обращается к сторонним веб-сервисам. Сервисов много, время ответа у них различно. Если синхронно выполнять каждый запрос к веб-сервису то на это уходит много времени...
Есть библиотека
https://github.com/bucefal91/php-async от уважаемого
https://habrahabr.ru/users/bucefal91/. При помощи этой библиотеки делаю ассинхронный вызов веб-сервисов, примерно так
$webservices=['service1', 'service2', 'service3']; //веб-сервисов может быть произвольное количество
$service=[];
foreach($webservices as $k=>$v){
$service[$v]=new ToolsAsyncResult('php index.php ' . $v); //делаем запрос к каждому сервису
}
У экземпляра класса ToolsAsyncResult есть метод isRunning() - который возвращает true во время выполнения скрипта и false если результат получен.
Для одного ассинхронного вызова отловить результат не проблема - у автора это сделано так
//тут мы вызваем ассинхронный запрос
$foo=new ToolsAsyncResult('php index.php servicename' );
while($foo->isRunning()){
//крутим цикл пока не придет ответ от сервиса
}
$result=$foo->result(); //получаем результат и как то его обрабатываем
Как отловить момент когда все экземпляра класса ToolsAsyncResult вернут данные?
сделать так
while($service[0]->isRunning() AND $service[1]->isRunning() AND $service[3]->isRunning()){
//крутим цикл пока не придет ответ от сервиса
}
не могу, потому что количество запущенных вызовов может быть произвольным.
Помогите пожалуйста моему горю