[TP3.2]一个实现jsonRPC的扩展,包含服务端和客户端

浏览:4264 最后更新:2014-03-27 13:56 分类:类库
jsonRPC是一个轻量级的远程过程调用协议,基于json。

本扩展包括服务端类和客户端类。
本扩展的客户端必须搭配服务端使用,由于增加了批量提交特性,无法与其他的jsonRPC服务对接,本扩展仅用于TP项目之间的远程控制器方法调用。
部署:
在客户端项目中,将JsonRpcClient.class.php放在 Common模块下的Lib目录里,若没有这个目录手动创建。
在服务端项目中,将JsonRpcServer.class.php放在 Common模块下的Lib目录里,若没有这个目录手动创建。

客户端调用:
>连接服务端控制器$jsonRpcClient = new \Common\Lib\JsonRpcClient("http://localhost/yiika_tp/index.php/JsonRpc");>远程调用过程$jsonRpcClient->rpcBind($a)->index("1","33");//调用服务端JsonRpc控制器下的index方法,传入两个参数 "1","33",将返回的结果绑定到$a变量上。>获取结果
$a变量是一个数组,若有错误,将得到$a['error']错误信息,若没有错误将得到$a['result']结果数据。
>批量调用
批量调用的作用是将多次请求合并到一次网络连接中,在网络延迟比较明显的环境下可节省大量网络连接时间消耗,大大提高效率。$jsonRpcClient->rpcMulti();//开启批量请求模式

...中间的调用过程和上面一样

$jsonRpcClient->rpcCommit();//提交请求,开启批量提交模式必须手动提交
服务端部署:
在想要响应jsonRPC的控制器中,通过在_initialize()方法中加入以下代码实现jsonRPC自动响应$jsonRpcServer = new \Common\Lib\JsonRpcServer($this);//初始化jsonRpc服务端
$jsonRpcServer->run();//启动服务,只响应jsonRpc请求,不影响正常的访问
服务端类会自动分析http请求,如果是通过客户端发来的,则会自动拦截处理,若是正常的访问,则不会响应。
方法定义:
服务端的方法其实就是控制器里的动作,如上面$jsonRpcClient->rpcBind($a)->index("1","33");其实就是调用的JsonRpc控制器下的index动作。
jsonRPC的动作需要通过return返回数据,不可有任何其他输出。
一个典型的jsonRPC的动作方法如下:function index(){
    return "this is a jsonRPC action's response";
}
如果TP中设置了ACTION_SHUFFIX,客户端调用时方法名无需加上动作方法后缀,服务端会自动处理。

代码已托管在git@oschina.net,若有需要前往查看详细代码和下载:
http://git.oschina.net/zstxt1989/ThinkPHP3.2-codes/tree/master/tp3.2-jsonRPC
若有更新将直接在git上更新,不再上传附件。
评论( 相关
后面还有条评论,点击查看>>