我有一个 C++ gRPC 客户端和 Golang gRPC 服务器。对于双向流,当客户端想要关闭流时,它会在调用 Finish() 时永远阻塞。
nilStatus::Ok
如果 Golang 服务器返回非零错误,则 Finish() 函数按预期返回。只有在没有错误的情况下才会出现问题。
示例:
.proto
service StreamTest {
rpc Get(stream StreamCommand) returns (stream Result) {}
}
message StreamCommand{
string cmd = 1;
}
message Result {
string res = 1;
}
.cpp
std::unique_ptr<ClientReaderWriter<StreamCommand, Result>> readerWriter;
bool Get(Result &res) {
return readerWriter->Read(&res);
}
bool CloseClient() {
StreamCommand cmd;
cmd.set_cmd("stop");
readerWriter->Write(cmd);
readerWriter->WritesDone();
Status status = readerWriter->Finish(); // <------ BLOCKING
return status.ok();
}
nil
感谢任何帮助!谢谢!