描述rpc方法的类型
- 对于service,需要定义相关的选择,生成service服务类和rpc方法描述,否则默认不生成。
option cc_generic_services=true;
syntax="proto3";
package fixbug;
option cc_generic_services=true;
message ResultCode
{
int32 errcode=1;
bytes errmsg=2;
}
message LoginRequest
{
bytes name=1;
bytes pwd=2;
}
message LoginResponse
{
ResultCode result=1;
bool success =2;
}
service UserServiceRpc
{
rpc Register(RegisterRequest) returns(RegisterResponse);
}
-
通过
protoc user.proto -cpp_out=./
可以生成.ph.c以及.ph.cc文件。
-
底层会自动生成相应的UserServiceRpc类(服务提供方使用)和 UserServiceRpc_Stub类(服务调用方使用)
-
UserServiceRpc底层基本框架 rpc服务提供者
-
UserServiceRpc_Stub底层代码 服务消费者
user.cc和user.h里面提供了两个非常重要的类供c++程序使用,
UserServiceRpc_Stub
类给caller
使用,可以调用UserServiceRpc_Stub::Login(...)
发起远端调用
UserServiceRpc
给callee
使用。callee则继承UserServiceRpc类并重写UserServiceRpc::Login(...)
函数,实现Login
函数的处理逻辑。 -
GetFriendLists 是与Login类似的。可以看到无论是那一个方法,底层都调用了
channel_->CallMethod(descriptor()->method(0), controller, request, response, done);
,这是属于RpcChannel
抽象类
我们在自己实现的时候需要写自己的channel类,然后继承RpcChannel
抽象类
这一点在接下来的分析中,我们会一一介绍。