Я хочу использовать PHP cURL в проекте, и в сценарии мне нужно отправить данные через cURL и дождаться ответа (и задержать весь код до получения ответа в запросе cURL) – запрос синхронизации, и я также хочу, чтобы другой сценарий для отправки данных aync и не дожидаться завершения запроса cURL.
Есть ли параметр или функция cURL, которую я могу использовать для отправки данных ASYNC и не дожидаться ответа от целевого URL-адреса, чтобы продолжить выполнение кода?
Вот мой код на данный момент, и запрос синхронизируется по умолчанию, и скрипт ожидает ответа от целевого URL-адреса.
$ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_POST,1); curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch,CURLOPT_POSTFIELDS,$data); $result = curl_exec($ch); curl_close($ch);
Мое приложение имеет два сценария:
1) Данные должны быть переданы на вторичный сервер, и как только будет получено подтверждение, что сервер получил его, продолжите выполнение кода в моем приложении;
2) Данные передаются на вторичный сервер, но передаваемая информация не так важна, поэтому нам не нужно ждать подтверждения, которое сервер получил, чтобы продолжить. спасибо
Вот пример из PHP Docs о том, как использовать завиток асинхронно:
<?php // create both cURL resources $ch1 = curl_init(); $ch2 = curl_init(); // set URL and other appropriate options curl_setopt($ch1, CURLOPT_URL, "http://lxr.php.net/"); curl_setopt($ch1, CURLOPT_HEADER, 0); curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/"); curl_setopt($ch2, CURLOPT_HEADER, 0); //create the multiple cURL handle $mh = curl_multi_init(); //add the two handles curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); $active = null; //execute the handles do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); while ($active && $mrc == CURLM_OK) { if (curl_multi_select($mh) != -1) { do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); } } //close the handles curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle($mh, $ch2); curl_multi_close($mh); ?>
В сценарии 2 multi_curl может быть вам полезен. Ваш запрос на завивание будет выполняться синхронно, но вы можете запустить более 1 параллельно (async). Таким образом, ваш сценарий может запускать другие задачи одновременно. Однако это требует, чтобы другой код / работа выполнялся из отдельного скрипта / файла.