gRPC:我应该为整个应用程序使用一个客户端吗?

gRPC: should I use a single client for the entire application?

我知道 gRPC 团队建议我们在整个应用程序中使用单一通道,这正是我们要做的。但是我们不确定在构造函数上接收此通道的客户端 class。最佳做法是什么:

我们有兴趣使用第一种方法,但我们不知道创建客户端的新实例是否也是一个昂贵的操作class。

客户端本质上只是 CallInvoker 的包装器,如果您从 Channel 开始,它将是 DefaultCallInvokerDefaultCallInvoker 只是 Channel 的包装器,没有状态或复杂性。客户端和 call-invoker 都没有添加同步之类的东西,因此与新客户端交谈的行为与与共享频道的 pre-existing 客户端交谈的行为相同。

结论:创建一个新客户端并不昂贵/call-invoker,但如果你想削减额外的 2 个分配,你应该能够在没有明显差异的情况下共享客户端。