Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
双向流式java客户端_Java_Streaming_Grpc Java - Fatal编程技术网

双向流式java客户端

双向流式java客户端,java,streaming,grpc-java,Java,Streaming,Grpc Java,我正在为SSL套接字上的双向流媒体创建一个java库(不能重用gRPC/HTTP2流媒体客户端) 我最初的想法是创建3个组件: 流线型连接 StreamReader(观察输入流) StreamWriter(写入输出流) StreamingClient 调用者与StreamingClient交互,StreamingClient调用StreamingConnection.connect()创建套接字连接,并将输入流作为构造函数参数传递给StreamReader和outputStream Stream

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

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

  • 流线型连接
  • StreamReader(观察输入流)
  • StreamWriter(写入输出流)
  • StreamingClient
  • 调用者与StreamingClient交互,StreamingClient调用StreamingConnection.connect()创建套接字连接,并将输入流作为构造函数参数传递给StreamReader和outputStream StreamWriter

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

    我试图想象一下在这些组件之间进行通信的最佳方式是什么?传递事件、调解人或任何其他我应该探索的模式


    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
    注入回调,并让客户端类处理该回调。