2015-06-12 4 views
1

Я разрабатываю сайт с PHP и отправляю запросы с помощью cURL.php асинхронный запрос cURL

У меня есть веб-сайт, который выполняет некоторые вычисления, и мне нужно получить ответ. Я отправляю запросы через cURL. В настоящее время я отправляю запрос, подождите 10 секунд и отправлю его снова (максимум 3 раза), если «хороший» ответ не получен. Если все запросы не выполняются, я отмечаю их как «исправление вручную».

Дело в том, что я хочу отправить запрос с тайм-аутом 30 секунд, а на 10-й секунде, если никакой ответ не получен, отправить еще один с таймаутом 20 секунд, на 20-й секунде, чтобы отправить последний с 10 сек тайм-аут. Возможно ли это?

Или, если мой текущий код остается, и я продолжаю отправлять запросы каждые 10 секунд с таймаутом по 10 секунд каждый, могу ли я продолжить прослушивание первого после того, как я отправлю второй (и первый и второй, когда я отправляю в третьих)?

Спасибо заранее!

ответ

3

Используйте удар, чтобы сделать асинхронные локоны позвонить

curl_setopt($crl, CURLOPT_TIMEOUT, 1); 
    curl_setopt($crl, CURLOPT_NOSIGNAL, 1); 

PHP SetOpt

+0

CURLOPT_TIMEOUT 1 закрывает запрос мгновенно и на самом деле URL скрипт не будет работать. Я пробовал это вчера. –

+0

Он отправит запрос и не будет ждать ответа. Меня устраивает. –

+0

Да, я пробовал много вариаций, и, наконец, я нашел хотя бы второй тайм-аут. который является 2000. Во всяком случае, он решает проблему, позвольте мне проголосовать за :) –

0

Используйте эту функцию

//background excute and wait for response 
private function BackgroundsendPostData($url, Array $post) { 
    $data = ""; 
    foreach ($post as $key => $row) { 
     $row = urlencode($row); //fix the url encoding 
     $key = urlencode($key); //fix the url encoding     
     if ($data == "") { 
      $data .="$key=$row"; 
     } else { 
      $data .="&$key=$row"; 
     } 
    } 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($ch, CURLOPT_TIMEOUT_MS, 2000); 
    $result = curl_exec($ch); 
    curl_close($ch); // Seems like good practice 
    return; 
} 
//usage 
BackgroundsendPostData("http://www.google.co.uk/",array('pram1'=>'value1','pram2'=>'value2')); 
Смежные вопросы