gRPC不会删除断开连接的频道

时间:2019-04-15 16:04:02

标签: grpc grpc-python

复制步骤

  1. 启动服务器
  2. 将客户端RPC发送到服务器
  3. 重新启动服务器
  4. 使用相同的客户端,发送另一个RPC。通话失败
  5. 发送另一个RPC,此调用将成功

我还发现,如果服务器在重新启动之前长时间处于停止状态,则第5步中的调用也会返回“通道处于TRANSIENT_FAILURE状态”。

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

预期结果

所有通话都应该成功。

已通过Python grpcio == 1.19.0服务器/客户端和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,但它们似乎无济于事。

1 个答案:

答案 0 :(得分:1)

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


您想要的功能可能是“ wait_for_ready”。如果是TRANSIENT_FAILURE(服务器暂时不可用),它将自动等待通道再次变为READY,而不会失败。 Read more关于等待准备。