服务方
1.首先服务的发布方在proto文件里面描述发布的方法,例如发送一个注册方法。
bash
message RegisterRequest
{
uint32 id = 1;
bytes name = 2;
bytes pwd = 3;
}
message RegisterResponse
{
ResultCode result = 1;
bool sucess = 2;
}
service UserServiceRpc
{
rpc Login(LoginRequest) returns(LoginResponse);
rpc Register(RegisterRequest) returns(RegisterResponse);
}
2.之后protoc user.proto --cpp_out=./生成cpp文件
生成完cpp后加入到服务方的代码中,我们将服务方的类继承于service UserServiceRpc类,重写我们的register类,框架负责调用该方法。
cpp
void Register(::google::protobuf::RpcController* controller,
const ::fixbug::RegisterRequest* request,
::fixbug::RegisterResponse* response,
::google::protobuf::Closure* done)
{
uint32_t id = request->id();
std::string name = request->name();
std::string pwd = request->pwd();
bool ret = Register(id, name, pwd);
response->mutable_result()->set_errcode(0);
response->mutable_result()->set_errmsg("");
response->set_sucess(ret);
done->Run();
}
};
调用方
根据proto文件里发布的方法,来写调用方的代码。
bash
int main(int argc, char **argv)
{
// 整个程序启动以后,想使用mprpc框架来享受rpc服务调用,一定需要先调用框架的初始化函数(只初始化一次)
MprpcApplication::Init(argc, argv);
// 演示调用远程发布的rpc方法Register
fixbug::RegisterRequest req;
req.set_id(2000);
req.set_name("mprpc");
req.set_pwd("666666");
fixbug::RegisterResponse rsp;
// 以同步的方式发起rpc调用请求,等待返回结果
stub.Register(nullptr, &req, &rsp, nullptr);
// 一次rpc调用完成,读调用的结果
if (0 == rsp.result().errcode())
{
std::cout << "rpc register response success:" << rsp.sucess() << std::endl;
}
else
{
std::cout << "rpc register response error : " << rsp.result().errmsg() << std::endl;
}
return 0;
}
这样就完成了一个服务方和调用方对rpc服务的使用。