双向流式传输 java 客户端

Bidirectional streaming java client

我正在为 SSL 套接字上的双向流创建一个 java 库(不能重复使用 gRPC/HTTP2 流客户端)。

我最初的想法是创建 3 个组件:

  1. 流媒体连接。
  2. StreamReader(观察输入流)。
  3. StreamWriter(写入输出流)。
  4. StreamingClient

调用者与 StreamingClient 交互,后者调用 StreamingConnection.connect() 来创建套接字连接,并将输入流作为构造函数参数传递给 StreamReader 和 outputStream 以及 StreamWriter。

但事实证明 Reader 需要根据传入消息在输出流上写入消息。此外,基于服务器可能会发送客户端应连接到的新主机详细信息,在这种情况下,我们会进行清理并再次开始流式传输。

我正在尝试想象在这些组件之间进行通信的最佳方式是什么?传递事件、中介或任何其他我应该探索的模式?

对 gRPC 双向流有任何见解或 class dia 吗?

我认为您不需要实现自己的 StreamWriter(当您在其上调用流式 RPC 时,这就是异步存根 returns ),除非您想用另一层逻辑包装它.大多数时候,实现将所有 StreamingConnection、StreamReader 和 StreamWriter 封装在 StreamingClient class 中。他们每个人在实现方面都不复杂(StreamingConnection 构建一个通道并创建一个存根,用于进行 RPC 调用;StreamReader 是实现 StreamObserver 的响应处理程序;StreamWriter 是 gRPC 库提供给您发送的消息到服务器)。将它们放在同一个 class 中(作为内部 classes 甚至匿名 classes)允许它们相互交互。