我已经使用 Google 的 gRPC 工具包实现了服务器和客户端。在测试时,我注意到从客户端到服务器的 TCP 连接永远不会超过一个,无论有多少 Channel
我构建的实例。
我打算通过 HAProxy 使用 Google 所说的“proxy load balancing”。因此,我需要从我的客户端(比如服务 A)到我的服务器(比如服务 B)的多个连接。如果创建的连接不超过一个,那么 HAProxy 会为该连接选择一项服务,其他服务器都不会看到任何负载。
我试过使用 ChannelOptions.MaxConcurrentStreams
在客户端和服务器端(以及双方同时),但没有任何运气。如前所述,我创建了多个 Channel
例,无济于事。我发现的唯一有效技术是创建多个进程,由于显而易见的原因,这并不理想。
我该怎么做才能完全启用 Google 的“代理负载平衡”方案?
最佳答案
目前,没有直接的方法来强制使用我们现有的 API 创建新的连接。正如我在评论中提到的,这可以通过我们的 C-Core 实现(由 gRPC C# 包装)完成,只需提供不同的 ChannelArgs
,表示连接的参数,如果存在,则确保为每组不同的 ChannelArgs
创建单独的连接.但是,仅使用不同的 channel 参数来获取同一连接的新副本并不是 API 的预期用例,因此除了确保建立新连接之外,没有真正无意义的 channel 参数不会改变任何内容。
但是,有一个 in-progress PR添加一个 channel 参数,明确强制子 channel (连接)共享仅发生在单个 channel 实例中。设置后,这将避免在 channel 实例之间共享连接,并允许您确保每个 channel 创建一个新连接。
关于c# - 如何强制我的 gRPC 客户端打开到服务器的多个连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53564748/