我知道helloworld
来源中有一个示例gRPC
程序。但是,对于这个新手,我不了解如何在服务器中编写多个异步服务。示例here讨论了如何生成类的新实例来处理SayHello
服务调用。
SayBye
,以便我可以从客户端拨打电话?答案 0 :(得分:10)
见this
thread和
相关的
example。
建议是在bool
(CallData
中添加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();
...