问题描述
我正在尝试将我的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.go { {1}},我的日志显示所有流都成功到达serveStreams (line 830)
,但是无法完成剩余部分以返回var wg sync.WaitGroup
。
有人可以帮我解决这个奇怪的错误,或者至少给我一些应该研究的方向吗?
解决方法
我现在设法解决了这个问题,因此来回答它。
原来,我正在使用其他日志系统进行调试,因此未收集默认的Golang错误消息并向我显示... Golang一直在向我大喊大叫,但我坐在另一个房间里,无法听到。
对于套接字问题,这是因为由于我的第3方库http2_client.erl
中缺少长连接支持,所以整个连接都已关闭。在为每个连接手动添加心跳之后,所有问题都得到解决,并且gRPC可以正常工作。