EASYLT文档 > Swoole框架 > 异步Mysql/Redis/cURL

异步Mysql

  • · 仅支持在server目录下服务文件中创建
  • · 当在如TCP等服务器、协程(不包含多进程容器)容器中创建异步Mysql时,无需创建异步Mysql容器,直接创建异步Mysql,否则会报
       错。
  • · 调用匿名函数外的变量请使用闭包写法(同步Mysql同理),如:
  •    new Async_mysql(function()use($var){Async_mysql::co($mysql_conn,$mysql_orm)use($var){}});
  • <?php
    include('server.ini');
    new Async_mysql(function(){//创建异步Mysql容器
        Async_mysql::co(function($mysql_conn,$mysql_orm){//创建异步Mysql一
            //$mysql_conn为mysql的mysqli面向过程连接变量,如下数据库操作示例:
            $sql = "insert into account(username) values('异步Mysql操作一')";
            mysqli_query($mysql_conn,$sql);
            mysqli_close($mysql_conn);
            //$mysql_orm为mysql的orm操作变量,具体操作请阅读ORM文档。
            },10);
            /**
     *10代表异步Mysql操作时,为避免发生同一时间片资源争抢而导致部分IO执行失败,设置的IO运行周期时间,以秒为单位,非必填项,可自行设置值;
     *PS:如果不设置IO运行周期时间,也默认自动实现IO异步非阻塞模式。
     */
        Async_mysql::co(function($mysql_conn,$mysql_orm){//创建异步Mysql二
            $sql = "insert into account(username) values('异步Mysql操作二')";
            mysqli_query($mysql_conn,$sql);
            mysqli_close($mysql_conn);
            },5);
    });
    //以上异步Mysql运行结果为:数据库5秒后写入'异步Mysql操作二',10秒后写入'异步Mysql操作一'。
    
    

    异步Redis

  • · 仅支持在server目录下服务文件中创建
  • · 当在如TCP等服务器、协程(不包含多进程容器)容器中创建异步Redis时,无需创建异步Redis容器,直接创建异步Redis,否则会报
       错。
  • · 调用匿名函数外的变量请使用闭包写法(同步Redis同理),如:
  •    new new Async_redis(function()use($var){Async_redis::co($mysql_conn,$mysql_orm)use($var){}});
  • <?php
    include('server.ini');
    new Async_redis(function(){//创建异步Redis容器
        Async_redis::co(function($redis){//创建异步Redis一
            //$redis为redis连接变量,如下数据库操作示例:
            $redis->set('async1','异步Redis操作一');
            echo $redis->get('async1');
            $redis->close();
            },10);
            /**
    *10代表异步Redis操作时,为避免发生同一时间片资源争抢而导致部分IO执行失败,设置的IO运行周期时间,以秒为单位,非必填项,可自行设置值;
    *PS:如果不设置IO运行周期时间,也默认自动实现IO异步非阻塞模式。
    */
            Async_redis::co(function($redis){//创建异步Redis二
                $redis->set('async2','异步Redis操作二');
                echo $redis->get('async2');
                $redis->close();
                },5);
    });
    //以上异步Redis运行结果为:数据库5秒后写入读取'异步Redis操作二',10秒后写入读取'异步Redis操作一'。
    
    

    异步cURL

  • · 仅支持在server目录下服务文件中创建
  • · 在new Async()协程容器中创建协程才可自动实现异步,但协程容器不可在服务器中创建,如TCP服务器,会发生冲突导致运行错误。
  • · 未创建协程容器时,在配置文件config_swoole.php中配置常量ASYNC_CO开启异步协程同样使协程自动实现异步。
  • <?php
    include('server.ini');
    new Async(function($channel){
        Async::co(function()use($channel){//创建协程一,同一协程内为同步阻塞执行
            //实例化POST请求的cURL对象
            $curl_post = new Curl;
            $result = $curl_post->post($url,$data,$headers,$status);
            //第一个参数为目标文件的url、第二个参数为发送的数据、第三个参数为头信息请求参数(非必填)、第四个参数为$data数据转换状态值(非必填),$result为请求返回值。
            //$headers的数据类型必须为array,且为一维数组,元素值用冒号分隔键值对,如:['Authorization:init']
            //$status参数默认可填值为'json'、'form',当头信息请求包含以下参数时:
            ['Contenttype:application/json','Accept:application/json'],请填入'json',此时body请求参数自动转换为json格式;
            //当头信息请求包含以下参数时:
            ['Content-Type:application/x-www-form-urlencoded'],请填入'form',此时body请求参数自动转换为uri拼接参数,如name=easylt&type=php;
    ​    });
    ​    Async::co(function()use($channel){//创建协程二
             //实例化GET请求的cURL对象
            $curl_get = new Curl_get;
            $result = $curl_get->get($url,$headers),第一个参数为目标文件的url、第二个参数为头信息请求参数(非必填),$result为请求返回值。
            //$headers的数据类型必须为array,且为一维数组,元素值用冒号分隔键值对,如:['Authorization:init']
      ​  });
    });