Я разрабатываю сервер для моей MMORPG с асинхронными сокетами. Для протокола я использую UDP. Каждый клиент, который подключается с действительными учетными данными, хранится в списке на сервере. Элементы этого списка содержат конечную точку (System.Net.EndPoint). Таким образом, я могу получить доступ ко всем клиентам и отправлять им сообщения.
Как вы, возможно, знаете, в MMORPG каждый игрок (клиент) перемещается и продолжает посылать свои координаты. Затем эти координаты должны быть переданы игрокам (клиентам) вокруг.
Моя проблема в том, что мое решение о трансляции выглядит так:
Parallel.ForEach(clientsToSend, (client) =>
{
SendUdpMessage(client.UdpEndPoint, broadcastMessage);
});
Я обеспокоен тем, что произойдет, когда в одном месте будут десятки клиентов. Допустим, 50 игроков движутся одновременно. Сервер зациклит 50 клиентов и отправит каждому свое сообщение. Я надеюсь, что вы поняли.
Есть ли "реальный" способ вещания? Потому что мы не на сетевом уровне (широковещательная рассылка IP с подсетью), но у нас есть список клиентов.