异步基础: C++
本教程介绍如何使用 C++ 的 gRPC 异步/非阻塞 API 去实现简单的服务器和客户端。假设你已经熟悉实现同步 gRPC 代码,如gRPC 基础: C++所描述的。本教程中的例子基本来自我们在overview中使用的Greeter 例子。你可以在 grpc/examples/cpp/helloworld找到安装指南。
概览
gRPC 的异步操作使用CompletionQueue。 基本工作流如下:
在 RPC 调用上绑定一个 CompletionQueue
做一些事情如读取或者写入,以唯一的 voide* 标签展示
调用 CompletionQueue::Next 去等待操作结束。如果标签出现,表示对应的操作已经完成。
异步客户端
要使用一个异步的客户端调用远程方法,你首先得创建一个频道和存根,如你在同步客户端中所作的那样。一旦有了存根,你就可以通过下面的方式来做异步调用:
初始化 RPC 并为之创建句柄。将 RPC 绑定到一个 CompletionQueue。
CompletionQueue cq;
std::unique_ptr > rpc(
stub_->AsyncSayHello(&context, request, &cq));
用一个唯一的标签,寻求回答和最终的状态
Status status;
rpc->Finish(&reply, &status, (void*)1);
等待完成队列返回下一个标签。当标签被传入对应的 Finish() 调用时,回答和状态就可以被返回了。
void* got_tag;
boo