EASYLT文档 > Swoole框架 > 异步任务

异步任务

  • · 以上TCP等服务器可选择性创建TASK异步任务,用于异步非阻塞处理一些耗时的任务,启用时需在配置文件config_swoole.php中相应
       的服务器配置开启异步任务。
  • · TASK异步任务中不支持协程、异步Mysql、异步Redis,所以当需要对DB操作时,请选择同步Mysql、同步Redis,以TCP服务器为例。
  • <?php
    include('server.ini');
    $tcp_serv = new Tcp_server;
    $tcp_serv->receive(function($request_data){
        return $request_data;
    });
    $tcp_serv->task(function($request_data,$task_id,$reactor_id){
        //$request_data为客户端发送的数据
        //$task_id为异步任务ID
        //$reactor_id为异步任务线程ID
        //匿名回调函数中写你的业务
        /**
     *创建同步Mysql
     *当配置文件config_swoole.php中配置常量ASYNC_CO为开启异步协程时,创建同步Mysql必须在容器中,即在如TCP等服务器或协程容器中(不含多进程容器,当放置多进程容器中也需包含服务器或协程容器),否则会发生冲突导致运行错误。
     */
        Sync_mysql::co(function($mysql_conn,$mysql_orm){
            //$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文档。
        });
        /**
     *创建同步Redis
     *当配置文件config_swoole.php中配置常量ASYNC_CO为开启异步协程时,创建同步Redis必须在容器中,即在如TCP等服务器或协程容器中(不含多进程容器,当放置多进程容器中也需包含服务器或协程容器),否则会发生冲突导致运行错误。
     */
        Sync_redis::co(function($redis){
            //$redis为redis连接变量,如下数据库操作示例:
            $redis->set('sync','同步Redis操作');
            echo $redis->get('sync');
            $redis->close();
        });
    });
    $tcp_serv->finish(function($state,$task_id,$reactor_id){
        //$state为task异步任务运行结果状态,当$state等于true时,异步任务运行完成。
        //$task_id为异步任务ID
        //$reactor_id为异步任务线程ID
        //匿名回调函数中写你的业务
    });
    $tcp_serv->start();
    
    

    同步Mysql

  • 当配置文件config_swoole.php中配置常量ASYNC_CO为开启异步协程时,创建同步Mysql必须在容器中,即在如TCP等服务器或协程容器中(不含多进程容器,当放置多进程容器中也需包含服务器或协程容器),否则会发生冲突导致运行错误。
  • <?php
    Sync_mysql::co(function($mysql_conn,$mysql_orm){
        //$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文档。
    });
    
    

    同步Redis

  • 当配置文件config_swoole.php中配置常量ASYNC_CO为开启异步协程时,创建同步Redis必须在容器中,即在如TCP等服务器或协程容器中(不含多进程容器,当放置多进程容器中也需包含服务器或协程容器),否则会发生冲突导致运行错误。
  • <?php
    Sync_redis::co(function($redis){
        //$redis为redis连接变量,如下数据库操作示例:
        $redis->set('sync','同步Redis操作');
        echo $redis->get('sync');
        $redis->close();
    });