【发布时间】:2018-04-11 20:05:03
【问题描述】:
用于创建通道的 gRPC C++ API 返回一个 shared_ptr。生成的函数 NewStub 返回一个 unique_ptr。但是我看到reports of people having issues 试图创建多个存根类型的实例,共享一个通道。他们的解决方案是共享存根。
从文档或 API 中不清楚客户端是要创建多个共享通道的存根实例还是共享单个存根。请澄清存根、通道和唯一客户端连接之间的概念关系。
潜水更深一点: 服务器可以提供多个服务,客户端端点可以使用单个通道将相应的存根类型连接到这些服务中的每一个。为此,很明显不同的存根类型共享单个通道来与服务器端点通信。 gRPC 是否期望给定服务的每个通道只有一个客户端,或者我可以在客户端端点上有多个客户端与单个服务通信?如果允许,如何在客户端端点上为给定服务实现多个客户端?服务器如何将这些区分为独立的客户端?
顺便说一句,This SO post 表示通道和存根都是线程安全的。 (这篇文章专门针对 Java,但我假设它会延续到 C++)。
【问题讨论】:
标签: c++ client channel grpc stub