业务中需要实现grpc请求的链式调用,服务流程如下所示:
client->serverA->serverB
在grpc服务端的创建CallData,代码如下所示:
class CallData {
public:
CallData(Save::AsyncService *service, ServerCompletionQueue *completionQueue) :
status_(CREATE),
service_(service),
completionQueue_(completionQueue),
responder_(&context_) {
//Invoke the sereving logic right away
Proceed();
}
void Proceed() {
if (CREATE == status_) {
status_ = PROCESS;
service_->Request(&context_, &request_, &responder_, completionQueue_, completionQueue_, this);
} else if (PROCESS == status_) {
new CallData(service_, completionQueue_, sender_);
//在此处新建异步请求吗?改写没有思路
status_ = FINISH;
responder_.Finish(reply_, Status::OK, this);
} else {
GPR_ASSERT(FINISH == status_);
delete this;
}
}
private:
enum CallStatus {
CREATE, PROCESS, FINISH
};
CallStatus status_;
//省略相关变量
};
在CallData的Proceed没有想到如何进行下一步的异步请求,以及如何处理返回的结果,求指教!
class CallData {