1

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

  1. 我有自己的应用程序逻辑在每个节点上做一些簿记工作;
  2. 一个节点需要与其他人通信以达成某种共识(应用程序逻辑的一部分),这意味着一个节点需要同时拥有客户端和服务器;
  3. 那么我怎么能做到这一点呢?在我调用 server.awaitTerminate() 之后,服务器似乎被阻塞了,对吧?但是我们在java中也有异步版本的gRPC服务器吗?我打赌是的,但我还不确定如何利用它。

例如,我有节点 A、B、C。我需要先启动 gRPC serverA、serverB、serverC,对于每个服务器说 A,我需要客户端连接到 B 和 C。除了通信部分,如果需要,应用程序(比如在节点 A 中)逻辑将能够通过相应的客户端(到服务器 B 和 C)向其他节点(比如 B 和 C)发送消息;当然,当来自 B 的请求时,应用程序逻辑会得到通知和 C(因为它本身就是一个服务器)。

我已经在网上搜索了几天,并浏览了 grpc/grpc-java 相关材料和代码示例。但是,我发现没有太多代码示例来展示利用 gRPC 的最佳实践和模式……我真的很想听听您可能有的任何建议……

提前致谢!

4

1 回答 1

1

不需要打电话给server.awaitTermination()你。main()示例这样做是因为 grpc-java 默认使用守护线程。因此,在示例中,唯一的非守护线程是主线程,您需要至少一个非守护线程来保持 JVM 运行。请参阅java.lang.Thread 的文档

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

于 2017-07-05T23:18:20.023 回答