мы разрабатываем 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, а результат отправляется одному или нескольким клиентам.
Какой из них является лучшим решением или какое решение лучше для этой проблемы?