我想在项目中使用PHP cURL,在场景中我需要通过cURL发送数据并等待响应(并延迟所有代码,直到在cURL请求中收到响应) - 同步请求,然后我还希望在不同的场景中发送数据异步,而不是等待cURL请求完成。
是否有可用于发送数据ASYNC的cURL参数或函数,而不是等待目标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)数据传递到辅助服务器,但传递的信息不是那么重要,因此我们不需要等待服务器收到它的确认,以便继续。 谢谢
答案 0 :(得分:3)
以下是PHP Docs中有关如何异步使用curl的示例:
<?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);
?>