gRPC - 如果空闲时间过长,双向流将转到 TRANSIENT_FAILURE gRPC 服务器日志:

问题描述

我正在尝试让一个相当简单的测试场景工作 - 我想创建一个长寿命的双向流 rpc,它可能会长时间闲置(带有本地服务器的电子应用程序)。

Node gRPC 客户端在本地启动 C# gRPC 服务器并启动双向流。流媒体服务接收每条消息,等待 50 毫秒,然后将其发回。

Node 客户端测试代码设置为发送 5 条消息,等待 30 秒,然后再发送 5 条消息。前 5 条消息成功往返。第二个 5 消息最终往返,但直到 5 分钟后。这段时间没有命中服务器端代码

我确定我在这里是一只狒狒,但我不明白为什么连接似乎消失得如此之快。我也不确定这里有哪些选项可以提供帮助(如果有的话)。似乎 keepalive 用于跟踪 TCP 连接是否仍然有效,但实际上并没有帮助保持它的存活。 idleTimeout 似乎也不相关,因为我们将根据 enum documentation here 获得 TRANSIENT_FAILURE 状态。

2016 年的

This discussion 与我想要做的很接近,但解决方案是 RYO 心跳。 This grpc-dotnet issue 似乎依赖于当前未使用的 heartbeat-type solution specific to ASP.NET

gRPC 服务器日志:

发送前 5 条消息后:

传输 000001A7B5A63090 设置connectivity_state=4

Start BDP ping err..."Endpoint read Failed" (意译)

5 分钟后,就在第二组 5 条消息通过之前:

W:000001A7B5AC8A10 SERVER [ipv6:[::1]:57416] 状态 IDLE -> WRITING [RETRY_SEND_PING]

节点库是@grpc/grpc-js

tl;dr 如何在停机时保持连接健康和工作?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)