Какое сетевое решение лучше для MMORPG? - PullRequest
1 голос
/ 23 апреля 2020

мы разрабатываем mmorpg с небольшой командой. На стороне сервера мы можем создать 2 структуры для управления клиентами и обработки пакетов. Интересно, какая структура лучше? Я был бы очень рад, если бы вы могли порекомендовать хорошую структуру.

Первая структура

IdleSessionQueue и ActiveSessionMap

TaskQueue и SendQueue

В этой структуре изначально создаются незанятые сеансы (IdleSessionQueue), и существует поток (NetworkListenerThread), который прослушивает сеть и принимает пользователей. Этот поток берет сеанс из неактивных сеансов, когда прибывает новый пользователь, и добавляет сеанс в таблицу активных сеансов (ActiveSessionMap), используя значения SessionId и Session. затем создает поток (ClientListenerThread) для прослушивания сеанса, добавленного в таблицу. ClientListenerThread происходит для каждого пользователя. Когда клиент отключается, он снова добавляется в IdleSessions.

Когда клиент отправляет запрос (пакет), этот запрос добавляется в TaskQueue. Определенное количество рабочих нитей создается заранее. Пока в TaskQueue есть пакет, WorkerThreads получает пакет, обрабатывает его и добавляет новый пакет в SendQueue. SenderThreads получает и отправляет каждый пакет в SendQueue клиенту.

Вторая структура

IdleSessionQueue и ActiveSessionMap

В этой структуре Первоначально создаются незанятые сеансы (IdleSessionQueue), и существует поток (NetworkListenerThread), который прослушивает сеть и принимает пользователей. Этот поток берет сеанс из незанятых сеансов, когда прибывает новый пользователь, и добавляет этот сеанс в таблицу активных сеансов (ActiveSessionMap), используя значения SessionId и Session. затем создает поток (ClientListenerThread) для прослушивания сеанса, добавленного в таблицу. ClientListenerThread происходит для каждого пользователя. Когда клиент отключился, он снова добавляется в IdleSessions. Когда клиент отправляет запрос (пакет), этот запрос обрабатывается ClientListenerThread, а результат отправляется одному или нескольким клиентам.

Какой из них является лучшим решением или какое решение лучше для этой проблемы?

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