微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。