gpp在cpp异步服务器中的多个服务

时间:2017-01-19 02:47:09

标签: grpc

我知道helloworld来源中有一个示例gRPC程序。但是,对于这个新手,我不了解如何在服务器中编写多个异步服务。示例here讨论了如何生成类的新实例来处理SayHello服务调用。

  1. 如何添加新服务,例如SayBye,以便我可以从客户端拨打电话?
  2. 如何让服务器识别客户端进行的服务调用?

1 个答案:

答案 0 :(得分:10)

this thread和 相关的 example。 建议是在boolCallData中添加hello_参数 这个例子),实例化两个CallData个对象,一个用hello_ = true,一个用hello_ = false,每个对象请求一个 不同的RPC。

if (hello_) {
  service_->RequestSayHello(...);
} else {
  service_->RequestSayBye(...);
}

对于两种以上类型的调用,您可以实现相同的行为 使用enum代替bool

更灵活的方法是使用不同的CallData 每个RPC的类。但是,当您从cq_->Next()获得标记时,您就可以了 知道它是指向其中一个类的对象的指针,但是你 不知道它的确切类型。为了克服这一点,你可以拥有它们 从具有虚拟Proceed()成员函数的类继承, 在每个子类中根据需要实现它,并在获得标记时进行转换 作为CallData并致电Proceed()

class CallData {
 public:
  virtual void Proceed() = 0;
};

class HelloCallData final : public CallData {...};
class ByeCallData final : public CallData {...};

...
new HelloCallData(...);
new ByeCallData(...);
cq_->Next(&tag, &ok);
static_cast<CallData*>(tag)->Proceed();
...