У меня есть игровой сервер, который будет работать в нескольких случаях.
Мир 1, Мир 2, Мир 3
Каждый мир - это сервер, который работает с другим IP-адресом.
Вот список того, что должна иметь игра:
- Подключение к игре, аутентификация пользователя.
- Возможность видеть всех подключенных игроков, отображать, к какому миру подключен каждый игрок.
- Возможность отправлять сообщения игроку, даже если он подключен к другому серверу мира.
- Возможность отправлять глобальные сообщения всем серверам.
Есть два подхода к этому, о которых я могу подумать:
Подход 1 - Сервер входа в систему TCP / IP
Создать сервер среднего уровня. Когда клиент подключается к миру, этот мировой сервер отправит пакет запроса входа в систему для введенных учетных данных пользователя, а сервер входа в систему проверит базу данных и ответит результатом проверки подлинности, в случае успеха пользователь будет авторизован в мир.
Сервер входа в систему всегда обновляет все миры со списком игроков онлайн, а также состояние каждого игрока, в каком мире он находится и т. Д.
- При отправке сообщения игроку Y от игрока X, когда оба находятся в разных мирах, мировой сервер отправит сообщение на сервер входа в систему, а сервер входа передаст его в целевой мир этого игрока, чтобы игрок в другом Мир получит сообщение.
Подход 2
Работают так же, как и подход 1 , но вместо сервера входа в систему имейте сервер HTTP API и обновляйте друг друга событиями, используя сервер Redis.
Почему я считаю, что это лучше? Потому что будет проще интегрировать веб-приложение в игру, поэтому разрешите пользователям подключаться и общаться друг с другом через веб-приложение.
Чтобы сделать это в подходе 1, вам нужно добавить новый туннель к вашему серверу входа TCP / IP для поддержки соединений WebSocket.
Извините за плохие рисунки.
Возможен ли подход 2? Как вы думаете, какой подход лучше, и если есть какой-то другой подход, о котором вы можете подумать?