@Dark_Dante

Как отловить ассинхронный php?

Здравствуйте.
В общем балуюсь с асинхронным исполнением 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()){
//крутим цикл пока не придет ответ от сервиса
}

не могу, потому что количество запущенных вызовов может быть произвольным.
Помогите пожалуйста моему горю
  • Вопрос задан
  • 218 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы