RPC Service

  • 组成sogouRPC服务的基本单元
  • 每一个Service一定由某一种IDL生成
  • Service只与IDL有关,与网络通信具体协议无关

示例

下面我们通过一个具体例子来呈现

  • 沿用上面的example.protoIDL描述文件
  • 执行官方的protoc example.proto --cpp_out=./ --proto_path=./获得example.pb.hexample.pb.cpp两个文件
  • 执行SogouRPC的srpc_generator protobuf ./example.proto ./获得example.srpc.h文件
  • 我们派生Example::Service来实现具体的rpc业务逻辑,这就是一个RPC Service
  • 注意这个Service没有任何网络、端口、通信协议等概念,仅仅负责完成实现从EchoRequest输入到输出EchoResponse的业务逻辑
  1. class ExampleServiceImpl : public Example::Service
  2. {
  3. public:
  4. void Echo(EchoRequest *request, EchoResponse *response, RPCContext *ctx) override
  5. {
  6. response->set_message("Hi, " + request->name());
  7. printf("get_req:\n%s\nset_resp:\n%s\n",
  8. request->DebugString().c_str(),
  9. response->DebugString().c_str());
  10. }
  11. };