如何让gRPC服务器和客户端在同一进程中实现双向通信(不是服务器/客户端流)

时间:2017-07-01 06:13:22

标签: grpc grpc-java

我对gRPC很新。我正在考虑使用gRPC(Java)在我的用例中进行节点间(服务器)通信:

  1. 我有自己的app逻辑,可以在每个节点上做一些簿记工作;
  2. 一个节点需要与其他人沟通以达成一些共识(app逻辑的一部分),这意味着节点需要都有客户端和服务器;
  3. 所以我怎么能做到这一点?我调用server.awaitTerminate()之后服务器似乎阻塞了吧?但是我们在java中是否也有g​​RPC服务器的异步版本?我打赌是的,但我还不确定如何利用它。
  4. 例如,我有节点A,B,C。我需要首先启动gRPC serverA,serverB,serverC,并且对于每个服务器说A,我需要客户端连接到B和C.除了通信部分,app(比如在节点A中)逻辑能够在需要时通过相应的客户端(到服务器B和C)将msg发送到其他节点(比如B和C);当然,当请求时会通知app逻辑来自B和C(因为它本身就是服务器)。

    我已经在网上搜索了几天,并且经历了grpc / grpc-java相关材料和代码示例。然而,我发现没有那么多代码示例来展示利用gRPC的最佳实践和模式...我真的很想听听你有什么建议......

    提前感谢!

1 个答案:

答案 0 :(得分:1)

不需要在 /* Body styles */ body { background-color: white; font-family: ; margin: 0px auto; width: 100%; min-width: 1000px; max-width: 1400px;} /* Image styles */ #box img { padding: 0px; float: left; width: 33%; } 中拨打 <div id="box"> <img src="box_social_bg.jpg" alt="Social link box" /> <img src="box_rewards_bg.jpg" alt="Rewards link box" /> <img src="box_franchise_bg.jpg" alt="Franchise link box" /> </div> 。示例这样做是因为grpc-java默认使用守护程序线程。因此,在示例中,唯一的非守护程序线程是主线程,并且您至少需要一个非守护程序线程来保持JVM运行。请参阅documentation for java.lang.Thread

server.awaitTermination() 不是处理新请求的main()方法; awaitTermination()只是阻塞当前线程,直到grpc服务器终止。处理发生在其他线程上。