io.grpc.StatusRuntimeException: UNAVAILABLE: Network closed for unknown reason
at io.grpc.stub.ClientCalls.toStatusRuntimeException(ClientCalls.java:262)
at io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:243)
at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:156)
The context
我在测试时候,打开服务端keepalive配置
client log
The question question1: 可以看到,服务端keepalive 如期工作,发送了ping,但是在闲置大约30分钟后,client主动给服务端发送GO_AWAY 关闭了网络连接。这个一个客户端行为,我查了net.devh.boot.grpc.client.config.GrpcChannelProperties 配置类的参数,不存在这个类似30分钟的配置。 我想知道这个30分钟客户端关闭连接的参数在哪里配置?
question2: 多层nat设备的最佳实战是什么? 在一些网络环境中,grpc的服务端和客户端可能会经过多处nat设备,这些设备可能会有以下问题
我能想到的方案 1 客户端配置
但是该种方案在客户端数量不多的时候问题不大,在数量多时候造成网络资源浪费可能会比较大
2 服务端配置
这个和方案1存在同样的问题
3 question1中的那个30分钟配置
修改question1中的30分钟配置的值,让它小于nat设备的tcp最大连接空闲时间。这样当没有数据传输时,客户端主动关闭连接,再有数据传输时再次建立连接进行数据传输这样可以避免client不知道tcp连接被关闭的情况,应用不需要处理 Network closed for unknown reason的情况
Which versions do you use?