【问题标题】:gRPC C# client channel managinggRPC C# 客户端通道管理
【发布时间】:2018-07-27 02:05:54
【问题描述】:

试图了解如何在 C# 中管理 gRPC 通道。

正如频道摘要所述

与调用远程调用相比,创建通道是一项昂贵的操作,因此一般来说,您应该为尽可能多的调用重用单个通道。

因此,我将其视为创建了两个 Channel 实例,我得到了两个 TCP 连接。

简单代码

var channel1 = new Channel(host, port, ChannelCredentials.Insecure);
var channel2 = new Channel(host, port, ChannelCredentials.Insecure);

channel1.ConnectAsync().Wait();
channel2.ConnectAsync().Wait();

我希望在 CurrPorts 中看到两个连接,但只有一个:

当然,如果我在第二个通道中指定另一个主机/端口,或者只运行我的应用程序的两个实例,我会看到两个 TCP 连接。

根据这种行为,我猜想在 C# 实现中对具有相同主机/端口的通道进行了一些管理。但我很好奇这是一种在一个实例中创建确实不同的频道的方法吗?

【问题讨论】:

    标签: c# grpc


    【解决方案1】:

    要强制不重用子频道,请通过以下频道选项: new ChannelOption("子通道分隔符", Guid.NewGuid().ToString())

    【讨论】:

      【解决方案2】:

      我对gRPC C#不是很熟悉,但是gRPC C#使用gRPC核心,gRPC核心有通道和子通道的概念。

      一个子通道对应一个实际的 TCP 连接,一个通道使用一个或多个子通道进行调用。如果一个或多个通道解析到同一个对等点,则一个子通道可能会被一个或多个通道(重新)使用。

      因此,当您为同一主机和端口创建两个通道时,很可能正在重用底层子通道,因此您只能看到一个连接。

      【讨论】:

      • 我不知道渠道和子渠道的概念。谢谢你。但是还有一个问题,如何强制不复用子通道。
      猜你喜欢
      • 1970-01-01
      • 2020-06-03
      • 1970-01-01
      • 2020-10-15
      • 2021-09-14
      • 2013-11-12
      • 2021-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多