开发场景
远程过程调用,较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();