网上有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有兴趣的同学看看还有什么需要改进的,晚上整理一下就发到扩展区了。 最佳答案