PHP cURL 同步和异步

标签 php curl asynchronous

我想在一个项目中使用 PHP cURL,在一个场景中我需要通过 cURL 发送数据并等待响应(并延迟所有代码,直到在 cURL 请求中收到响应)- 同步请求,我还希望在不同的场景中异步发送数据,而不是等待 cURL 请求完成。

是否有 cURL 参数或函数可用于异步发送数据而不是等待目标 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 的示例如何异步使用 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);

?>

关于PHP cURL 同步和异步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25018162/

相关文章:

php - 在 phpmyadmin mysql 中创建外键

php - MySQL 查询不插入在 PHP 中添加的数组元素

php - Magento:如果父类别为空,则显示来自子类别的产品

javascript - 在 jQuery.ajax 的 beforeSend 中加载异步内容

php - iOS 到 PDO PHP 和 MySQL

json - 类似 curl 的 Golang JSON/HTTP 请求

java - 将 Curl 命令转换为 Java/Android

selenium - 如何批量测试 URL 重定向?

javascript - 从 Cordova 中的 getCurrentPosition 返回值

asynchronous - python-requests 是否支持 HTTP2 和异步调用?