Я пытаюсь создать систему, состоящую из 1 главного сервера и как минимум 2 служб gRP C (размещенных с использованием HTTP.Sys), которые могут быть как клиентами основного сервера, так и принимать подключения от основного сервера, которые упоминаются ниже. в качестве "Рабочие" . Каждый элемент системы находится внутри локальной сети. Однажды запущенный работник подключается к главному серверу, и главный сервер должен добавить соединение в пул, где к клиентскому работнику можно будет обратиться позже, чтобы сделать вызов gRP C. Пример того, как я ожидаю, что это будет работать ниже
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; Мне нужен сервер gRP C, способный хранить клиентские службы gRP C для дальнейшего использования, такие как широковещательные сообщения ,