如何在gRPC C#通道中禁用soReusePort?

如何在gRPC C#通道中禁用soReusePort?,c#,networking,load-testing,grpc,http2,C#,Networking,Load Testing,Grpc,Http2,我正在尝试为Grpc服务器构建一个负载测试应用程序。我希望通道在尝试通过禁用“SoResuePort通道选项”连接到服务器时打开不同的端口。通过使用以下代码: string Host = "192.168.1.20"; int Port = 7081; IEnumerable<ChannelOption> options = new[] { new ChannelOption(ChannelOptions.SoReuseport, 0) }; ChannelOne = new

我正在尝试为Grpc服务器构建一个负载测试应用程序。我希望通道在尝试通过禁用“SoResuePort通道选项”连接到服务器时打开不同的端口。通过使用以下代码:

string Host = "192.168.1.20";
int Port = 7081;  

IEnumerable<ChannelOption> options = new[] { new ChannelOption(ChannelOptions.SoReuseport, 0) };
ChannelOne = new Channel(Host, Port, ChannelCredentials.Insecure , options);
ChannelTwo = new Channel(Host, Port, ChannelCredentials.Insecure , options);

await ChannelOne.ConnectAsync();
await ChannelTwo.ConnectAsync();
string Host=“192.168.1.20”;
int端口=7081;
IEnumerable options=new[]{new ChannelOption(ChannelOptions.SoReuseport,0)};
ChannelOne=新通道(主机、端口、通道凭据。不安全,选项);
ChannelTwo=新通道(主机、端口、通道凭据。不安全,选项);
等待ChannelOne.ConnectAsync();
等待ChannelTwo.ConnectAsync();

我希望gRPC为每个通道打开一个新的TCP连接,但它正在重用相同的TCP连接。

在客户端连接之前,服务器需要打开所有端口号。由于连接必须是唯一的(源IP地址、目标IP地址和端口),如果从客户端到服务器的连接已经存在,并且具有端口号,则会发生故障,然后需要使用不同的端口号。您发布的代码不会检查之前是否发生故障以及下一个端口号(如果使用)。新频道是否使用相同的端口号或不同的端口号?我怀疑调用中的零是端口号,您正在调用的每个实例都是零,而不是新的端口号。所有通道实例都连接到服务器,并且每个都正常工作,但它们都通过一个TCP连接连接。我还检查了gRPC-C版本,似乎他们检查值为非零以重用相同的TCP连接,但如果值为零,则将使用新的freeport构建TCP_侦听器。您的术语是错误的。每个TCP连接只是一个连接。TCP侦听器可以有多个具有相同端口号的连接,但远程端点必须不同。如果您有多个端口号,则需要多个TCP侦听器。是的,您的权利是,服务器正在侦听一个IP和端口,我试图实现的是,每个通道在连接到服务器时创建一个单独的唯一端口号,因为我无权更改通道创建的行为。如果我运行控制台应用程序的两个实例,每个实例使用不同的端口号,但在控制台应用程序的一个实例上,所有通道共享相同的连接请参见:链接使用两个实例,每个数据库一个实例。不确定为什么不能为一个数据库的两个实例使用,除非每个实例必须为客户端使用不同的端口号。服务器需要在客户端连接之前打开所有端口号。由于连接必须是唯一的(源IP地址、目标IP地址和端口),如果从客户端到服务器的连接已经存在,并且具有端口号,则会发生故障,然后需要使用不同的端口号。您发布的代码不会检查之前是否发生故障以及下一个端口号(如果使用)。新频道是否使用相同的端口号或不同的端口号?我怀疑调用中的零是端口号,您正在调用的每个实例都是零,而不是新的端口号。所有通道实例都连接到服务器,并且每个都正常工作,但它们都通过一个TCP连接连接。我还检查了gRPC-C版本,似乎他们检查值为非零以重用相同的TCP连接,但如果值为零,则将使用新的freeport构建TCP_侦听器。您的术语是错误的。每个TCP连接只是一个连接。TCP侦听器可以有多个具有相同端口号的连接,但远程端点必须不同。如果您有多个端口号,则需要多个TCP侦听器。是的,您的权利是,服务器正在侦听一个IP和端口,我试图实现的是,每个通道在连接到服务器时创建一个单独的唯一端口号,因为我无权更改通道创建的行为。如果我运行控制台应用程序的两个实例,每个实例使用不同的端口号,但在控制台应用程序的一个实例上,所有通道共享相同的连接请参见:链接使用两个实例,每个数据库一个实例。不确定为什么不能为一个数据库的两个实例使用,除非每个实例必须为客户端使用不同的端口号。