服务方
1.首先服务的发布方在proto文件里面描述发布的方法,例如发送一个注册方法。
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类,框架负责调用该方法。
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文件里发布的方法,来写调用方的代码。
int main(int argc, char **argv)
{// 整个程序启动以后,想使用mprpc框架来享受rpc服务调用,一定需要先调用框架的初始化函数(只初始化一次)MprpcApplication::Init(argc, argv);// 演示调用远程发布的rpc方法Registerfixbug::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服务的使用。