关于jsonRPC,有没有人感兴趣?

浏览:3509 发布日期:2014/01/16 分类:技术分享
jsonRPC是一个轻量级的远程过程调用协议,无需像soap那样复杂的配置,也无需像rest那样掌握不熟悉的http协议,用我们最常用的json来实现远程函数调用。
网上有php jsonRPC的例子,但是在TP里使用并不是很方便,而且不支持批量请求。

so.今天下午,我就自己写了个基于TP3.2的扩展,主要实现了:
1.服务端与控制器结合,无需复杂的配置,可直接在现有控制器中介入,基本上服务端只需要两行代码即可。
2.支持一次请求调用多个方法的批量模式,避免了每次调用一个方法都需要一次网络请求。


客户端:<?php
// 本类由系统自动生成,仅供测试用途
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
    function indexAction(){
        $jsonRpcClient = new \Common\Lib\JsonRpcClient("http://localhost/yiika_tp/index.php/JsonRpc");
        $jsonRpcClient->rpcMulti();//开启批量请求模式
        $jsonRpcClient->rpcBind($a)->index("1","33");
        $jsonRpcClient->rpcBind($b)->bye();
        $jsonRpcClient->rpcCommit();//提交请求
        if(isset($a['error'])){
            echo $a['error'];
        }else{
            echo $a['result']."<br/>";
        }
        if(isset($b['error'])){
            echo $b['error'];
        }else{
            echo $b['result'];
        }
    }
}
服务端:<?php
namespace Home\Controller;
use Think\Controller;
class JsonRpcController extends Controller {
    function _initialize(){
        
        $jsonRpcServer = new \Common\Lib\JsonRpcServer($this);//初始化jsonRpc服务端
        $jsonRpcServer->run();//启动服务,只相应jsonRpc请求,不影响正常的访问
    }
    function indexAction($a="",$b=""){
        return $a."hello".$b;
    }
    function byeAction(){
        return "good bye";
    }
}
输出:1hello33
good bye
有兴趣的同学看看还有什么需要改进的,晚上整理一下就发到扩展区了。
最佳答案
评论( 相关
后面还有条评论,点击查看>>