Асинхронные запросы PHP

524
24 февраля 2017, 03:26

Подскажите как лучше организовать асинхронные запросы в PHP?

Мне нужно отправить запрос, получить ответ и произвести некоторые вычисления с этими данными.

Буду премного благодарен за любую информацию.

Пробовал с popen, примерно так, но что-то подсказывает, что я делаю не так:

$url = "someurl";
for ($i=1;$i<=2000;$i++) {
    if(($fp = popen('curl "'.$url.'"', "r")) ) {
        while(!feof($fp)) {
            $data[] = fread($fp, 1024);
            flush();
        }
        fclose($fp);
    }
    someFunctionForWorkWithData($data);
}
Answer 1

Вам нужно использовать мультикурл, он дает некоторую асинхронность

$mc = curl_multi_init();
$c = [];
for ($i=1;$i<=2000;$i++) {
  $c[$i] = curl_init();
  //набиваете $c[$i] нужными вам данными
  curl_multi_add_handle($mc,$c[$i]);
}
$active = null;
do {
  $mrc = curl_multi_exec($mc, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && $mrc == CURLM_OK) {
  if (curl_multi_select($mc) != -1) {
    do {
      $mrc = curl_multi_exec($mc, $active);
    } while ($mrc == CURLM_CALL_MULTI_PERFORM);
  }
}
$responses = [];
for ($i=1;$i<=2000;$i++) {
  $responses[$i] = curl_multi_getcontent($c[$i]);
  curl_multi_remove_handle($mc,$c[$i]);
}
curl_multi_close($mc);
READ ALSO
Есть ли кеширование запросов в IIS?

Есть ли кеширование запросов в IIS?

Можно ли IIS настроить так, чтобы, например, один и тот же запрос кешировался минут на 10 и пользователю возвращался сохраненный HTML вместо нового...

349
Опять сессии в CodeIgniter

Опять сессии в CodeIgniter

Реализовываю следующий модульДобавления товара в избранное

494