Grpc: Grpc C ++ клиент и Grpc java сервер, асинхронный двунаправленный поток

Я пытаюсь написать клиент cpp для двунаправленного потока API.

С помощью следующего клиентского кода я могу создать наблюдатель потока на сервере. Однако проблема заключается в вызове функции onNext на сервере StreamObserver.

Существует ли определенный протокол для выполнения этого вызова с использованием клиента cpp и сервера java?

Прото файл:

// A client-to-server stream RPC to append data
rpc append(stream ratis.common.RaftClientRequestProto)
returns (stream ratis.common.RaftClientReplyProto) {}

Код сервера

@Override
public void onNext(RaftClientRequestProto request) {
try {
final RaftClientRequest r = ClientProtoUtils.toRaftClientRequest(request);
LOG.info("recieved request " + r.getCallId());
final PendingAppend p = new PendingAppend(r);
slidingWindow.receivedRequest(p, this::processClientRequestAsync);
} catch (Throwable e) {
responseError(e, () -> "onNext for " + ClientProtoUtils.toString(request));
}
}

Код клиента

    RaftClientRequestProto req = create_request(read_requet, sizeof(ContainerCommandRequestProto));
grpc::ClientContext ctx;
std::shared_ptr<ClientReaderWriter<RaftClientRequestProto, RaftClientReplyProto>> cli_stream(stub->append(&ctx));

std::thread writer([cli_stream]() {
RaftClientReplyProto resp;
std::cout << "goind to read " << std::endl;
cli_stream->Read(&resp);
std::cout << "read done" << std::endl;
});

std::cout << "Thread started" << std::endl;
std::this_thread::sleep_for(std::chrono::milliseconds(10000));
std::cout << "Doing writes" << std::endl;
cli_stream->Write(req);
cli_stream->WritesDone();
std::cout << "writes done" << std::endl;

0

Решение

Эта проблема была из-за различия в версии protobuf.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]