【问题标题】:gRPC socket closed by go-side Server由 go-side 服务器关闭的 gRPC 套接字
【发布时间】:2020-12-20 03:42:13
【问题描述】:

我正在尝试将我的 Erlang 代码和 Go 代码与 gRPC 连接,在此期间我发现如果我同时连接到 gRPC 太多次,我的套接字将被 Go 服务器关闭,进一步停止我的 Erlang 客户端(一个gen_server)。没有给我任何错误信息,只是 Erlang 中的一个简单代码显示 http2_client socket closed by peer #Port<some port info>

我确定没有达到 gRPC 允许的并发流的限制(因为我的调试日志没有显示我们到达那个地方),仔细查看后发现问题发生在google.golang.org\grpc\server.goserveStreams (line 830) ,我的日志显示所有流都成功到达var wg sync.WaitGroup,但无法完成剩余部分返回defer st.Close()

有人可以帮我解决这个奇怪的错误,或者至少给我一些我应该研究的方向吗?

【问题讨论】:

  • 你说的是这个功能吗? github.com/grpc/grpc-go/blob/master/server.go#L838 乍一看,在我看来 Go 并没有关闭流——如果你的信息是正确的,它就不会返回到 st.Close()
  • 真的很抱歉没有提供源代码,这是一个非常愚蠢的错误。我已经被困在这两天了,我的想法就像......所以......无论如何,我已经更新了这个问题。 @TehSphinX

标签: go tcp grpc grpc-go


【解决方案1】:

我现在已经解决了这个问题,所以来回答一下。

原来我使用不同的日志系统进行调试,因此没有收集默认的 Golang 错误消息并呈现给我...... Golang 一直对我尖叫和大喊大叫,但我坐在另一个房间不能听听。

对于socket问题,这是因为我的第3方库http2_client.erl缺少长连接支持,整个连接都关闭了。为每个连接手动添加心跳后,所有问题都解决了,gRPC 工作正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    • 2013-01-22
    • 1970-01-01
    • 2013-02-17
    相关资源
    最近更新 更多