对长时间运行的通知通道使用 ServerStreaming rpc 调用

Posted

技术标签:

【中文标题】对长时间运行的通知通道使用 ServerStreaming rpc 调用【英文标题】:Using a ServerStreaming rpc call for long running notifications channel 【发布时间】:2019-07-03 15:30:24 【问题描述】:

我正在考虑使用 gRPC 服务来促进两个服务之间的通知。 (顺便说一句,我将使用 protobuf-net/protobuf-net.Grpc)目的是客户端服务将建立并维护与服务器服务的连接,并随着时间的推移对通知做出反应。在一个完美的技术世界中,没有网络故障,没有服务器重新启动等,想法是建立一次连接,并在应用程序的生命周期内让服务器流式调用实时。显然,在现实世界中,我们需要处理重试、重新连接、故障转移等。

我的问题是:在 grpc 中调用服务器流式调用并长时间保持调用打开是对服务器流式调用的适当使用,还是滥用该功能?

【问题讨论】:

是的,gRPC 非常适合这个用例。见***.com/questions/43621586/…。您可以在grpc.io/docs/guides/concepts 阅读有关 gRPC 的更多信息 【参考方案1】:

这是 gRPC 的完美用例。 gRPC 就是为这种用途而设计的。

是的,当与服务器的连接中断时,您必须处理重新连接或更准确地重新建立流。

【讨论】:

我确信这在一定程度上取决于用例,但设置双工调用为每个通知提供 ACK 是否习惯或首选?

以上是关于对长时间运行的通知通道使用 ServerStreaming rpc 调用的主要内容,如果未能解决你的问题,请参考以下文章

带有进度通知的长时间运行的后台任务

雪花警报长时间运行的查询

ruby 在长时间运行的shell命令后通知

JVM如何通知长时间运行的线程“停止”[重复]

如果 Android 设备长时间处于空闲状态,则不会收到推送通知

WCF - 长时间打开通道是不好的做法吗?