端口似乎是在同一进程中共享的,以分离grpc通道



我的问题涉及使用C核心的gRPC客户端,特别是C++

我一直在调试我们的一台服务器,我注意到当客户端从不同的进程(两个独立的控制台窗口(启动时,特定的两个客户端流可以工作,但不能从自动化测试用例(在单个进程中运行(中启动。所讨论的流程涉及两个";客户端";(基本上是通道(,它们同时处于活动状态,并同时向同一服务器发出请求

进一步挖掘,我发现在工作流程中,服务器接收到来自两个不同ip:port组合的请求:127.0.0.1:xxxx和127.0.0.1:yyyy。然而,在失败的情况下,两个请求都来自同一个ip:port。

我为每个客户创建了一个单独的通道,所以这种行为让我很困惑

  1. gRPC是否像这样在同一进程中的通道之间共享端口?如果没有,那么我不得不想象我的代码中有一个错误
  2. 如果(1(为"是",是否有任何方法可以避免此端口重复使用

我确实看到了";grpc.so-reuseport"选项,并注意它在默认情况下是启用的。这似乎更多地与服务器而不是客户端有关(尽管我可能在做一个任意的区分(,但我会禁用它并尝试

编辑:so.reuseport选项没有任何作用,但我在Windows上,所以无论如何我都应该预料到:/我在这里也发现了一个没有任何答案的相关问题

第二版:关于这个问题的讨论似乎很有希望。将尝试并向报告

在编辑2中的问题I链接中提到/解释了这一点,但答案是使用

auto metadata = grpc::ChannelArguments();
metadata.SetInt(GRPC_ARG_USE_LOCAL_SUBCHANNEL_POOL, 1);

并将其传递给grpc::CreateCustomChannel

最新更新