Я создал игру (все еще в бета-версии, нуждаюсь в улучшениях и других вещах), и я хотел бы знать, существует ли лучший подход к тому, что я сделал на своих игровых серверах. (Запрограммировано на C #)
Процесс игры в игру примерно такой:
Клиентское приложение (проигрыватель) & rarr; подключиться к лобби-серверу & rarr; проверить наличие комнаты с игрой, в которую он любит играть & rarr; лобби отвечает на запрос и указывает игроку на правильный игровой сервер (все используют «сырые» TCP / сокеты).
Каждый игровой сервер автоматически запускает игру, когда в комнате присутствует как минимум 4 игрока (возможно несколько комнат) и максимум 12. Каждая комната запускается в отдельном потоке, я имею в виду, я создаю один поток на комнату ( 4-12 игроков), поэтому, если у меня есть 1.200 (гораздо больше можно ожидать от игрового сервера), то будет не менее 100 потоков (даже больше, в зависимости от того, сколько игроков действительно в каждой комнате).
Основной поток (и это работа) плюс все созданные потоки будут потреблять все ресурсы на моем сервере ... поэтому мне было интересно, кто-нибудь может предложить лучшую идею или подход?
Имейте в виду, что все соединения асинхронные, за исключением комнаты, я имею в виду, в комнате, где сервер должен ждать хода одного игрока (например, игра Ludo или ставка), чтобы позволить следующему игроку (в комнате) сделать то же самое. На самом деле, кнопки, чтобы сделать ход, доступны только для игрока, который должен двигаться дальше. По этой причине передача происходит синхронно, и когда кто-то перемещается, остальные получают соответствующие уведомления.