JsonRpc的基础用法

jsonrpc代理主要用于同一主机不同进程间通信,只需要编写配置文件,就能生成两个接口用于两个进程通信。
注:使用该功能必须先安装jsonrpc库,该库依赖于jsoncpp,同时需要安装scons与cmake。

编写环境:Linux操作系统,C++语言,G++编译器


编写配置文件,配置文件是json格式,例子:
[
{
"name": "Connectser",
"returns": "Connectser responce data Json string"
},
{
"name": "Connecttest",
"params": {
"canshu": "Connecttest data Json string"
},
"returns": "Connecttest responce data Json string"
}
]

这个例子写了两对接口,第一个接口函数名为Connectser,返回值是string类型,没有参数。
第二个接口函数名为Connecttest,有一个参数,参数名为canshu,参数类型为string,返回值为string类型。

编写完成后在命令行输入
jsonrpcstub (配置文件名) --cpp-server=(生成接收端文件名) --cpp-client=(生成发送端文件名)
比如创建的json文件名为test,需要生成接收端为AbsSerStuSer,发送方为UIStuCli
jsonrpcstub test.json --cpp-server=AbsSerStuSer --cpp-client=UIStuCli
就能生成absserstuser.h与uistucli.h两个头文件,需要通信的两个进程分别调用这两个头文件便能进行通信。

接收方编写:
头文件中需要添加<jsonrpccpp/client/connectors/httpclient.h>
与<jsonrpccpp/client/connectors/htpserver.h>头文件
同时也需要添加刚才生成的<absserstuser.h>头文件
并声明
using namespace jsonrpc;
创建相应的类
class ServStubServer : public AbsSerStuSer {
public :
ServStubServer(AbstractServerConnector &connector): AbsSerStuSer(connector)
{}
virtual std::string Connectser();
virtual std::string Connecttest(const std::string& canshu);
};
创建完成后在需要接收的类中public下添加
HttpServer *hs; //用于添加监听用端口号
ServStubServer *_lpRpcServer;

在该类的构造函数中添加
hs = new HttpServer(8363); //监听端口为8363
_lpRpcServer = new ServStubServer(*hs);
_lpRpcServer->StartListening(); //开始监听,等待发送方发送消息

添加实现功能函数(具体功能为写出,需根据需求自己编写)
string ServStubServer::Connectser();
string ServStubServer::Connecttesr(const string &canshu);

发送方编写:
头文件中需要添加<jsonrpccpp/client/connectors/httpclient.h>
与<jsonrpccpp/client/connectors/htpserver.h>头文件
同时也需要添加刚才生成的<uistucli.h>头文件
还需添加<iostream>头文件
另在需要发送数据的类中public下添加发送函数
string Connectser() throw(jsonrpc::JsonRpcException); (此处函数名参数之类的可自己更改)
string Connecttest(const std::string& canshu) throw (jsonrpc::JsonRpcException);

实现发送函数(该函数可自己编写,红色的部分是必须存在的):
string Connectser() throw(jsonrpc::JsonRpcException)
{
HttpClient httpclient("http://localhost:8363"); //设定发送用端口
httpclient.SetTimeout(3000); //设置超时时间,3秒。
UIStuCli c(httpclient);
string strJson = c.Connectser(); //strJson用于接收接收方返回值,Connectser是发送函数
return strJson; //将得到的结果返回
}

string Connecttest(const std::string& canshu) throw (jsonrpc::JsonRpcException)
{
HttpClient httpclient("http://localhost:8363"); //设定发送用端口
httpclient.SetTimeout(3000);
UIStuCli c(httpclient);
string strJson = c.Connecttest(canshu);
return strJson; //将得到的结果返回
}
  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值