c# - 如何强制我的 gRPC 客户端打开到服务器的多个连接?

标签 c# haproxy grpc

我已经使用 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/

相关文章:

ruby - 如何从 gRPC 服务返回错误?

c# - 根据自定义条件防止个别 session 过期?

c# - eConnect 10 错误编号 - 我如何检查它们的含义?

c# - 在Azure上部署WCF服务,尝试访问数据库时超时

ssl - haproxy 是否支持 OCSP 进行客户端证书验证

session - 具有 SSL 和共享 session 的 Haproxy

java - 找不到 TLS ALPN 提供商;没有可用的 netty-tcnative、Conscrypt 或 Jetty NPN/ALPN

c# - 更好的收藏或更好的字典搜索方式

http - HAProxy 保持事件 - 1.5-dev21

go - 获取 RPC 描述符失败