Я пытаюсь создать асинхронный клиент 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;
};
Мне нужно реализовать шаги 1 и 2 в функции receiveFromServer()
.