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

时间:2019-07-19 10:42:00

标签: c# client grpc channel

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

  • 在每次调用时创建客户端类的新实例
  • 每个线程使用一个客户端实例
  • 在整个应用中使用一个客户端(与我们在渠道上使用的方法相同)

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

1 个答案:

答案 0 :(得分:3)

从本质上讲,客户端只是CallInvoker的包装,如果您从DefaultCallInvoker开始,它将是ChannelDefaultCallInvoker也是 ,只是Channel的包装,没有状态或复杂性。客户端和呼叫调用者均未添加任何类似同步的内容,因此与新客户端通话与与共享通道的现有客户端通话具有相同的行为。

结论:创建一个新的客户/呼叫调用者并不十分昂贵,但是如果您要节省额外的2个分配,则应该能够共享客户,而不会产生明显的差异。