Трансляция асинхронных сокетов C # UDP - PullRequest
0 голосов
/ 04 сентября 2018

Я разрабатываю сервер для моей MMORPG с асинхронными сокетами. Для протокола я использую UDP. Каждый клиент, который подключается с действительными учетными данными, хранится в списке на сервере. Элементы этого списка содержат конечную точку (System.Net.EndPoint). Таким образом, я могу получить доступ ко всем клиентам и отправлять им сообщения.

Как вы, возможно, знаете, в MMORPG каждый игрок (клиент) перемещается и продолжает посылать свои координаты. Затем эти координаты должны быть переданы игрокам (клиентам) вокруг.

Моя проблема в том, что мое решение о трансляции выглядит так:

Parallel.ForEach(clientsToSend, (client) =>
{
    SendUdpMessage(client.UdpEndPoint, broadcastMessage);
});

Я обеспокоен тем, что произойдет, когда в одном месте будут десятки клиентов. Допустим, 50 игроков движутся одновременно. Сервер зациклит 50 клиентов и отправит каждому свое сообщение. Я надеюсь, что вы поняли.

Есть ли "реальный" способ вещания? Потому что мы не на сетевом уровне (широковещательная рассылка IP с подсетью), но у нас есть список клиентов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...