Привет, Хабр. Рад представить свою первую статью: описание прототипа игрового мультиплеерного сервера.
→ Исходный код (под лицензией Apache 2.0)
Содержание:
Входной точкой является websocket-контроллер, принимающий всевозможные реквесты от пользователей: начиная от логина и заявок на игру до игровых ходов и написания сообщений в чат. Этот контроллер обслуживает thread-pool (около 20 потоков).
Одной из самых важных вещей в игре — является быстрая обработка игровых действий (приоритетный безнес-кейз). То есть в идеале игра должна мгновенно реагировать на действия пользователя и не «зависать». В то время как для множества других не игровых действий, таких например, как аутентификация, написание сообщений в чат или матчинг игроков (для совместной игры) — большая или меньшая задержка вполне приемлема для пользователя.
Поэтому архитектуру я постарался спроектировать также и в соответствии с этим требованием (см. картинку):
→ Исходный код (под лицензией Apache 2.0)
Содержание:
- Архитектура обработки входящих запросов
- Краткое описание прочих моментов
- Модули и взаимодействия основных классов
- Разные виды тестов
- Кэширование при работе с БД
Архитектура обработки входящих действий от пользователя
Входной точкой является websocket-контроллер, принимающий всевозможные реквесты от пользователей: начиная от логина и заявок на игру до игровых ходов и написания сообщений в чат. Этот контроллер обслуживает thread-pool (около 20 потоков).
Одной из самых важных вещей в игре — является быстрая обработка игровых действий (приоритетный безнес-кейз). То есть в идеале игра должна мгновенно реагировать на действия пользователя и не «зависать». В то время как для множества других не игровых действий, таких например, как аутентификация, написание сообщений в чат или матчинг игроков (для совместной игры) — большая или меньшая задержка вполне приемлема для пользователя.
Поэтому архитектуру я постарался спроектировать также и в соответствии с этим требованием (см. картинку):