【发布时间】:2020-04-23 22:41:45
【问题描述】:
我正在尝试构建一个由 1 个主服务器和至少 2 个 gRPC 服务(使用 HTTP.Sys 托管)组成的系统,这些服务既可以是主服务器的客户端,也可以接受来自主服务器的连接,以下称为“工人”。系统的每个元素都在本地网络内。一个worker一旦启动就会连接到主服务器,主服务器应该将连接添加到池中,稍后可以访问客户端worker以进行gRPC调用。我期望它在下面如何工作的示例
public class MainServer : MainServer.MainServerGrpcBase
{
public List<GrpcChannel> ChannelPool { get; set; }
public MainServer()
{
ChannelPool = new List<GrpcChannel>();
}
public override async Task<Confirmation> Connect(ConnectionRequest request, ServerCallContext context)
{
ChannelPool.Add(context.Channel);
return new Confirmation { Success = true; }
}
// Having a channel pool allows me using methods like this.
public void BroadcastMessage(string message)
{
foreach(var channel in ChannelPool)
{
var client = new Worker.WorkerClient(channel);
client.SendMessage(message);
}
}
}
我尝试过的:
- 在客户端确定工作人员 IP 并将其发送到主服务器,然后使用
GrpcChannel.FromAddress(...)创建通道,结果我发现我无法获取适当的工作人员地址来创建通道。 - 从
ServerCallContext.Peer创建通道时,该属性返回不适合创建通道的奇怪 IPv6 地址。
TLDR; 我需要一个能够存储客户端 gRPC 服务以供进一步使用的 gRPC 服务器,例如广播消息。
【问题讨论】:
标签: c# asp.net-core connection-pooling grpc