我有一个 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

感谢任何帮助!谢谢!