双向流式java客户端
我正在为SSL套接字上的双向流媒体创建一个java库(不能重用gRPC/HTTP2流媒体客户端) 我最初的想法是创建3个组件:双向流式java客户端,java,streaming,grpc-java,Java,Streaming,Grpc Java,我正在为SSL套接字上的双向流媒体创建一个java库(不能重用gRPC/HTTP2流媒体客户端) 我最初的想法是创建3个组件: 流线型连接 StreamReader(观察输入流) StreamWriter(写入输出流) StreamingClient 调用者与StreamingClient交互,StreamingClient调用StreamingConnection.connect()创建套接字连接,并将输入流作为构造函数参数传递给StreamReader和outputStream Stream
gRPC双向流的任何细节或类dia?我认为您不需要实现自己的StreamWriter(这是在异步存根上调用流RPC时返回给您的),除非您想用另一层逻辑来包装它。大多数情况下,实现将所有StreamingConnection、StreamReader和StreamWriter封装在StreamingClient类中。它们中的每一个在实现方面都不复杂(StreamingConnection构建一个通道并创建一个存根,用于进行RPC调用;StreamReader是实现的响应处理程序;StreamWriter是gRPC库为您提供的向服务器发送消息的处理程序)。将它们放在同一个类中(作为内部类,甚至是匿名类)允许它们彼此交互。我考虑过使用内部类和父类方法。我看到这种方法的问题是耦合,我想知道gRPC或其他双向流式客户端如何解决这个问题?实际上,流读取器引用父类的方法时,不能注入自己读取流的方式。您可以实现一个抽象类
StreamHandler
,该抽象类实现StreamObserver
,并在其构造函数中接收另一个StreamObserver
。接收的StreamObserver
是gRPC在进行RPC调用时返回的writer。这个StreamHandler
基本上就是阅读器,它具有writer的引用,因此它的实现能够在读取响应时写入消息。您可以将此StreamHandler
的具体实现注入到您的客户端,该客户端执行基本设置和RPC调用。关于基于响应创建到另一个主机的新连接,您可以向StreamHandler
注入回调,并让客户端类处理该回调。