如何从流服务器接收消息?

我正在尝试构建一个异步gRPC C ++客户端,该客户端使用ClientAsyncReaderWriter实例向服务器发送/从服务器接收流消息。客户端和服务器在需要时彼此发送消息。如何检查服务器是否有任何消息?

ClientAsyncReaderWriter实例具有绑定的完成队列。我试图通过调用Next()AsyncNext()函数来检查完成队列,以查看是否有任何事件表明服务器发出了一些消息。但是,即使服务器发出消息,完成队列也没有事件。

class AsyncClient {
public:
    AsyncClient(std::shared_ptr<grpc::Channel> channel) :
        stub_(MyService::NewStub(channel)),stream(stub_->AsyncStreamingRPC(&context,&cq,(void *)1))
    {}
    ~AsyncClient()
    {}

    void receiveFromServer() {
        StreamingResponse response;

        // 1. Check if there is any message
        // 2. Read the message
    }

private:
    grpc::ClientContext context;
    grpc::CompletionQueue cq;
    std::shared_ptr<MyService::Stub> stub_;
    std::shared_ptr<grpc::ClientAsyncReaderWriter<StreamingRequest,StreamingResponse>> stream;
};

我需要在receiveFromServer()函数中实现步骤1和2。

hhqqhhhhqqhh 回答:如何从流服务器接收消息?

幸运的是,我找到了解决问题的方法,并且项目中的异步双向流传输现在可以按预期工作。 原来,我对“完成队列”概念的理解不正确。 example对我来说是一个很大的帮助!

本文链接:https://www.f2er.com/3139203.html

大家都在问