首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GRPC C++客户端finish()用Golang服务器永久阻塞

GRPC C++客户端finish()用Golang服务器永久阻塞
EN

Stack Overflow用户
提问于 2018-02-22 03:46:44
回答 1查看 1.1K关注 0票数 1

我有一个C++ gRPC客户端和Golang gRPC服务器。对于双向流,当客户端想关闭流时,它将永远阻止对Finish()的调用。

只有当存在没有错误,即服务器rpc函数返回nil时,才会发生这种情况。如果服务器是用C++编写的,我知道它会返回Status::Ok

如果Golang服务器返回一个非零错误,那么Finish()函数将按预期返回。只有在没有错误的情况下才会出现问题。

示例:

.proto

代码语言:javascript
复制
service StreamTest {
  rpc Get(stream StreamCommand) returns (stream Result) {}
}
message StreamCommand{
  string cmd = 1;
}
message Result {
  string res = 1;
}

.cpp

代码语言:javascript
复制
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();
}

我已经用Golang gRPC客户端测试了服务器,它运行得很好。服务器应该返回nil错误以外的其他内容吗?我应该把这个报告为窃听器吗?

任何帮助都是非常感谢的!谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-03-01 16:14:04

我不熟悉Go,但我知道c++层。你能用GRPC_VERBOSITY=debug和GRPC_TRACE=api运行客户端吗?这将使我们对这个问题有更深入的了解。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48919324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档