我正在客户端和服务器之间使用双向grpc。我想在客户端和服务器上实现异步比迪,即客户端打开一个流并开始向服务器发送任意消息,而另一个线程继续接收服务器响应。下面的示例演示了服务器端异步双向https://groups.google.com/forum/m/#!topic/grpc-io/DuBDpK96B14。 有没有人在客户端尝试过异步比迪?
答案 0 :(得分:0)
在https://grpc.io/docs/tutorials/async/helloasync-cpp/
处有一个包含客户端和服务器的代码实验室异步客户端
要使用异步客户端调用远程方法,首先要创建一个通道和存根,就像在同步客户端中一样。拥有存根后,请执行以下操作以进行异步调用:
启动RPC并为其创建一个句柄。将RPC绑定到CompletionQueue。
CompletionQueue cq;
std::unique_ptr<ClientAsyncResponseReader<HelloReply> > rpc(
stub_->AsyncSayHello(&context, request, &cq));
使用唯一标签询问回复和最终状态
Status status;
rpc->Finish(&reply, &status, (void*)1);
等待完成队列返回下一个标签。返回传递给相应Finish()调用的标记后,答复和状态就准备好了。
void* got_tag;
bool ok = false;
cq.Next(&got_tag, &ok);
if (ok && got_tag == (void*)1) {
// check reply and status
}
您可以在greeter_async_client.cc中看到完整的客户端示例。