gRPC 不会丢弃断开连接的通道

gRPC not dropping disconnected channel

重现步骤

  1. 启动服务器
  2. 向服务器发送客户端 RPC
  3. 重启服务器
  4. 使用相同的客户端,发送另一个 RPC。呼叫将失败
  5. 发送另一个RPC,本次调用成功

我还发现,如果服务器在再次启动之前长时间停止,则步骤 5 中的调用也会 return "channel is in state TRANSIENT_FAILURE"。

示例代码:https://github.com/whs/grpc-repro (从 requirements.txt 然后 运行 main.py 安装)

预期结果

所有调用都应该成功。

使用 Python grpcio==1.19.0 server/client 和 go-grpc 服务器进行测试。我尝试设置 grpc.max_connection_age_grace_ms、grpc.max_connection_age_ms、grpc.max_connection_idle_ms、grpc.keepalive_time_ms、grpc.keepalive_permit_without_calls,但它们似乎没有帮助。

问题与 https://groups.google.com/forum/#!msg/grpc-io/199V_iF0NMw/NahHz_vMBwAJ 重复。


您想要的功能可能是“wait_for_ready". In case of TRANSIENT_FAILURE (server not available temporarily), it will automatically wait for the channel become READY again without failing. Read more关于等待就绪。