【问题标题】:Be sure that a gRPC bi-directional streaming message is arrived to the client确保 gRPC 双向流式消息到达客户端
【发布时间】:2021-11-01 16:29:32
【问题描述】:
我正在制作一个小型 Java gRPC 项目,我在其中使用多个 gRPC 服务。
这种服务之一是双向流。我想知道如何确保来自“服务器”的消息到达所有客户端。
例如,假设我从服务器向所有客户端发送了一条消息“hello”,有没有办法确保所有客户端都收到了“hello”消息?只有当我确定所有客户端都收到该消息时,才继续使用服务器对我来说是关键。
【问题讨论】:
标签:
java
grpc
grpc-java
bidirectional
【解决方案1】:
使用另一条消息。客户端本质上需要确认服务器的消息,最好使用从客户端到服务器的消息来完成。服务器消息的识别方式在不同的系统中有所不同,有时使用单独的唯一 ID,有时使用版本 ID,这意味着“到此为止的所有内容”都已处理,有时只需要按顺序的“ACK”消息而无需添加详细信息。
不过,您应该警惕意外的比赛。例如,如果您使用纯 ACK 消息,则服务器不应认为该流上的所有服务器消息都已被确认。相反,ACK 应该只应用于最旧的未确认消息。