EASYLT文档 > Swoole框架 > RPC服务

开发场景

  • 远程过程调用,较RESTful风格API接口效率更高,适用于大型系统、多系统间的业务往来。
  • RPC服务器

    <?php
    //引入服务器配置文件【必须实现】
    include('server.ini');
    
    //创建服务器【必须实现】
    $rpc_serv = new Rpc_server($ip,$port);
    /**
     *$ip为服务器监听ip地址,选填项,当不填入时自动填入配置文件config_swoole.php中的常量值。
     *$port为服务器端口号,选填项,当不填入时自动填入配置文件config_swoole.php中的常量值。
     *PS:当填入$ip时,必须填入$port;当填入$port时,可忽略$ip,如:new Rpc_server('',9501);
     */
    
    //当客户端连接成功时触发【可选项】
    $rpc_serv->connect(function(){
        //匿名回调函数中写你的业务
    });
    
    //当接收到请求数据时【必须实现】
    $rpc_serv->receive(function($function_name,$function_param){
        //$function_name为客户端请求的方法名,数据类型为string;
        //$function_param为客户端请求的实参,数据类型为array;
        /**
     *如客户端RPC调用发送请求数据为'func1(liteng,10)',则$function_name为func1,$function_param[0]为liteng,$function_param[1]为10,数字索引下标取值。
     *以下为RPC方法定义默认语法示例,统一采用switch多分支条件结构:
     */
          switch($function_name){
              case 'func1': //定义的方法名供客户端调用,以下为方法体用于实现业务;
                  $name = $function_param[0];
                  $old_num = $function_param[1];
                  $int = intval($old_num);
                  $num = $int + 20;
                  $result = $name.'一共有'.$num.'颗糖果';
                  return $result; //如需返回给客户端数据请return $var
                  break;
              case 'func2': //定义的方法名供客户端调用,以下为方法体用于实现业务;
                  $name = $function_param[0];
                  $old_num = $function_param[1];
                  $int = intval($old_num);
                  $num = $int + 10;
                  $result = $name.'一共有'.$num.'颗糖果';
                  return $result; //如需返回给客户端数据请return $var
                  break;
              default: return '方法调用失败'; //客户端请求不传参的返回值,如需返回给客户端数据请return $var
          }
    });
    
    //处理task异步任务,具体操作请阅读异步任务部分文档【可选项】
    $rpc_serv->task(function($request_data,$task_id,$reactor_id){
        //$request_data为客户端发送的数据
        //$task_id为异步任务ID
        //$reactor_id为异步任务线程ID
        //匿名回调函数中写你的业务
    });
    
    //task异步任务完成事件【如启用task则必须实现】
    $rpc_serv->finish(function($state,$task_id,$reactor_id){
        //$state为task异步任务运行结果状态,当$state等于true时,异步任务运行完成。
        //$task_id为异步任务ID
        //$reactor_id为异步任务线程ID
        //匿名回调函数中写你的业务
    });
    
    //当客户端关闭成功时触发【可选项】
    $rpc_serv->close(function(){
        //匿名回调函数中写你的业务
    });
    
    //启动服务器【必须实现】
    $rpc_serv->start();
    
    

    RPC客户端

    <?php
    //引入服务器配置文件【WEB服务器(FPM)运行无需实现  server服务的CLI模式运行必须实现】
    include('server.ini');
    
    //创建客户端【必须实现】
    $rpc_cli = new Rpc_client($ip,$port);
    /**
     *$ip为服务器ip地址,选填项,当不填入时自动填入配置文件config_swoole.php中的常量值。
     *$port为服务器端口号,选填项,当不填入时自动填入配置文件config_swoole.php中的常量值。
     *PS:当填入$ip时,必须填入$port;当填入$port时,可忽略$ip,如:new Rpc_client('',9501);
     */
    
    //像服务器发送数据【必须实现】
    $rpc_cli->send(function(){
        //匿名回调函数中写你的业务
        //如需发送数据请return $var,发送的请求数据格式为方法调用写法,类型为string,如:'func1(liteng,10)'
    });
    
    //从服务器接收数据【必须实现】
    $rpc_cli->receive(function($response_data){
        //$response_data为服务器返回的数据
        //匿名回调函数中写你的业务
    });
    
    //关闭连接【必须实现】
    $rpc_cli->close();