加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 如何判断curl_multi_exec何时完成_sending_ data

发布时间:2020-12-13 22:45:42 所属栏目:PHP教程 来源:网络整理
导读:我需要从 PHP脚本调用web服务. Web服务很慢,我对它的响应不感兴趣,我只想向它发送数据. 我正在尝试使用curl_multi_exec(以下示例:http://www.jaisenmathai.com/articles/php-curl-asynchronous.html),它的第二个参数($still_running)让您知道它何时完成发送
我需要从 PHP脚本调用web服务. Web服务很慢,我对它的响应不感兴趣,我只想向它发送数据.

我正在尝试使用curl_multi_exec(以下示例:http://www.jaisenmathai.com/articles/php-curl-asynchronous.html),它的第二个参数($still_running)让您知道它何时完成发送和接收.但是,再次,我只想知道我的脚本何时完成发送.当然,如果我在完成发送数据之前退出脚本,则Web服务永远不会注册接收请求.

另一种看待它的方法是检测PHP何时空闲,等待服务器的响应.

我想要实现的是这个对话:

> PHP:嗨,请保存这些数据
> WS:好的,哼哼,让我们想一想.
> PHP:Cya! (做更重要的事情)
> WS:好的,我完成了处理,这是你的回复…… PHP?你去哪儿?我觉得二手:(

解决方法

你可以试试

$url = "http://localhost/server.php";
$nodes = array();
$nodes["A"] = array("data" => mt_rand());   <-------- Random Data 
$nodes["B"] = array("data" => mt_rand());
$nodes["C"] = array("data" => mt_rand());
$nodes["D"] = array("data" => mt_rand());

    echo "<pre>";
$mh = curl_multi_init();
$curl_array = array();
foreach ( $nodes as $i => $data ) {
    $curl_array[$i] = curl_init($url);
    curl_setopt($curl_array[$i],CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curl_array[$i],CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)');
    curl_setopt($curl_array[$i],CURLOPT_POST,CURLOPT_POSTFIELDS,$data);
    curl_setopt($curl_array[$i],CURLOPT_CONNECTTIMEOUT,5);
    curl_setopt($curl_array[$i],CURLOPT_TIMEOUT,15);
    curl_multi_add_handle($mh,$curl_array[$i]);
    echo "Please save this data  No : $i ",$data['data'],PHP_EOL;
}

echo PHP_EOL,PHP_EOL;

$running = NULL;
do {
    usleep(10000);
    curl_multi_exec($mh,$running);
} while ( $running > 0 );
$res = array();
foreach ( $nodes as $i => $url ) {
    $curlErrorCode = curl_errno($curl_array[$i]);
    if ($curlErrorCode === 0) {
        $info = curl_getinfo($curl_array[$i]);
        if ($info['http_code'] == 200) { <------- Connection OK
            echo "Cya! (off to do something more important  No : $i Done",PHP_EOL;
            echo curl_multi_getcontent($curl_array[$i]),PHP_EOL ;
        }
    }
    curl_multi_remove_handle($mh,$curl_array[$i]);
    curl_close($curl_array[$i]);
}
curl_multi_close($mh);

产量

Please save this data  No : A 1130087324
Please save this data  No : B 1780371600
Please save this data  No : C 764866719
Please save this data  No : D 2042666801


Cya! (off to do something more important  No : A Done
Ok,Im done processing,here is your response... 
    {"data":"1130087324"} PHP? Where did you go? 
    I feel used :(
113
Cya! (off to do something more important  No : B Done
Ok,here is your response... 
    {"data":"1780371600"} PHP? Where did you go? 
    I feel used :(
113
Cya! (off to do something more important  No : C Done
Ok,here is your response... 
    {"data":"764866719"} PHP? Where did you go? 
    I feel used :(
112
Cya! (off to do something more important  No : D Done
Ok,here is your response... 
    {"data":"2042666801"} PHP? Where did you go? 
    I feel used :(
113

简单的测试服务器server.php

echo printf("Ok,here is your response... nt%s PHP? Where did you go? ntI feel used :(n",json_encode($_REQUEST));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读