zoukankan      html  css  js  c++  java
  • [PHP] php使用curl_multi_exec并行同时执行http请求

    当php代码要对外请求多个接口的时候 , 可以使用下面的方式并行执行多个请求

    主要是使用curl_multi_exec函数实现

    代码中请求的test.php文件 , 是sleep(10)秒

    如果按传统的逐行执行的方式 , 请求两次这个接口代码会阻塞20秒的时间 , 现在使用同时并行执行的方式,代码只会阻塞10秒

    并且请求也是会同时到达对方接口的

    <?php
    // 创建一对cURL资源
    $ch1 = curl_init();
    $ch2 = curl_init();
    
    // 设置URL和相应的选项
    curl_setopt($ch1, CURLOPT_URL, "http://81.69.45.114/test/test.php");
    curl_setopt($ch1, CURLOPT_HEADER, 0); 
    curl_setopt($ch2, CURLOPT_URL, "http://81.69.45.114/test/test.php");
    curl_setopt($ch2, CURLOPT_HEADER, 0); 
    
    // 创建批处理cURL句柄
    $mh = curl_multi_init();
    
    // 增加2个句柄
    curl_multi_add_handle($mh,$ch1);
    curl_multi_add_handle($mh,$ch2);
    
    $active = null;
    // 执行批处理句柄
    do {
        $mrc = curl_multi_exec($mh, $active);
            var_dump($mrc);
    } 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);
        }   
    }
    
    // 关闭全部句柄
    curl_multi_remove_handle($mh, $ch1);
    curl_multi_remove_handle($mh, $ch2);
    curl_multi_close($mh);

    执行后nginx日志的展示:

    开源作品

    GO-FLY,一套可私有化部署的免费开源客服系统,安装过程不超过五分钟(超过你打我 !),基于Golang开发,二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的网页在线客服系统,致力于帮助广大开发者/中小站长快速整合私有客服功能
    github地址:go-fly
    官网地址:https://gofly.sopans.com

    赞赏作者

    微信交流

  • 相关阅读:
    Linux命令:mapfile
    Linux命令:logout
    行式数据库和列式数据库的浅析
    hadoop常见错误集锦
    hadoop环境搭建遇到问题集锦
    杀毒的一点学习
    powerdesigner的学习
    突然的想法
    shell脚本入门教程(转)
    java classpath深入详解(转)
  • 原文地址:https://www.cnblogs.com/taoshihan/p/14453045.html
Copyright © 2011-2022 走看看