【发布时间】: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