Как синхронизировать время между клиентами в онлайн-игре - PullRequest
2 голосов
/ 06 августа 2020

Я делаю многопользовательскую онлайн-игру на NodeJS, где игроки должны как можно быстрее угадывать правильный ответ на головоломку. Игра состоит из нескольких раундов по 1 минуте каждый (аналогично skribbl.io ). Между каждым раундом делается 10-секундная пауза, на которой отображается табло. Если каждый игрок нашел ответ до истечения времени, раунд немедленно заканчивается.

Когда клиент игрока загружает игру, сервер отправляет, сколько времени осталось до текущего раунда, в зависимости от того, когда он запущено и время сервера. В клиенте каждого игрока есть локальный таймер для раундов и 10-секундная пауза между ними. Таймер клиента инициализируется с использованием оставшегося времени, отправленного сервером. Когда таймер игрока истек или когда есть уведомление веб-сокета, в котором говорится, что раунд закончился, клиент показывает, что раунд закончился.

Чтобы начался первый раунд, человек, создавший игру, щелкает на кнопке, чтобы сказать серверу создать новый раунд и головоломку. Затем сервер отправляет уведомление через веб-узел игрокам этой игры о начале раунда.

Моя проблема заключается в следующем: раунды должны начинаться и заканчиваться в одно и то же время для каждого игрока. После первого раунда должна быть создана головоломка для следующего раунда, поэтому сервер должен знать, что он должен создать новый раунд с головоломкой и сообщить игрокам через веб-узел, что начался новый раунд. Поскольку я мог бы в конечном итоге развернуть свою игру на нескольких серверах (кластеризовать ее), я хочу, чтобы мой сервер не сохранял состояние, поэтому я не хочу, чтобы серверная часть сохраняла таймеры для каждой игры, в которую играют.

У вас есть идеи, как можно решить эту проблему?

Спасибо,

...