RPC Server

  • 每一个Server对应一个端口
  • 每一个Server对应一个确定的网络通信协议
  • 每一个Service可以添加到任意的Server里
  • 每一个Server可以拥有任意的Service,但在当前Server里ServiceName必须唯一
  • 不同IDL的Service是可以放进同一个Server中的

示例

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

  • 沿用上面的ExampleServiceImplService
  • 首先,我们创建1个RPC Server、需要确定协议
  • 然后,我们可以创建任意个数的Service实例、任意不同proto形成的Service,把这些Service通过add_service()接口添加到Server里
  • 最后,通过Server的start或者serve开启服务,处理即将到来的rpc请求
  • 想像一下,我们也可以从Example::Service派生更多的功能的rpcEcho不同实现的Service
  • 想像一下,我们可以在N个不同的端口创建N个不同的RPC Server、代表着不同的协议
  • 想像一下,我们可以把同一个ServiceIMPL实例add_service到不同的Server上,我们也可以把不同的ServiceIMPL实例add_service到同一个Server上
  • 想像一下,我们可以用同一个ExampleServiceImpl,在三个不同端口、同时服务于BPRC-STD、SogouRPC-STD、SogouRPC-Http
  • 甚至,我们可以将1个PB的ExampleServiceImpl和1个Thrift的AnotherThriftServiceImpladd_service到同一个SogouRPC-STD Server,两种IDL在同一个端口上完美工作!
  1. int main()
  2. {
  3. SRPCServer server_srpc;
  4. SRPCHttpServer server_srpc_http;
  5. BRPCServer server_brpc;
  6. ThriftServer server_thrift;
  7. ExampleServiceImpl impl_pb;
  8. AnotherThriftServiceImpl impl_thrift;
  9. server_srpc.add_service(&impl_pb);
  10. server_srpc.add_service(&impl_thrift);
  11. server_srpc_http.add_service(&impl_pb);
  12. server_srpc_http.add_service(&impl_thrift);
  13. server_brpc.add_service(&impl_pb);
  14. server_thrift.add_service(&impl_thrift);
  15. server_srpc.start(1412);
  16. server_srpc_http.start(8811);
  17. server_brpc.start(2020);
  18. server_thrift.start(9090);
  19. pause();
  20. server_thrift.stop();
  21. server_brpc.stop();
  22. server_srpc_http.stop();
  23. server_srpc.stop();
  24. return 0;
  25. }