使用C ++的Grpc异步双向客户端

时间:2019-11-13 06:15:51

标签: asynchronous client grpc bidirectional bidi

我正在客户端和服务器之间使用双向grpc。我想在客户端和服务器上实现异步比迪,即客户端打开一个流并开始向服务器发送任意消息,而另一个线程继续接收服务器响应。下面的示例演示了服务器端异步双向https://groups.google.com/forum/m/#!topic/grpc-io/DuBDpK96B14。 有没有人在客户端尝试过异步比迪?

1 个答案:

答案 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中看到完整的客户端示例。