Обновите базу данных, когда пользователь больше не онлайн - PullRequest
0 голосов
/ 10 марта 2019

В настоящее время я работаю над многопользовательской игрой Javascript.

Когда пользователи хотят играть, они входят в комнату ожидания, где они ждут игроков, с которыми можно играть.

Он хранится в базе данных SQL следующим образом: У меня есть таблица с именем USER с некоторыми данными об игроках и другая таблица с именем WAITINGROOM, которая связывает идентификатор USERID пользователя, ожидающего игру, с другой информацией.

Когда игроки покидают зал ожидания или закрывают браузер, я удаляю строку с их идентификатором в таблице WAITINGROOM.

Но давайте предположим, что пользователь теряет подключение к Интернету во время поиска игры. Как я могу узнать, что он не в сети, чтобы я мог удалить строку, содержащую его идентификатор?

Игрок не в сети, так что это определенно не клиентская сторона, я могу с этим справиться. Может быть, серверная сторона в PHP? Или непосредственно в базе данных, используя таймауты или что-то ...

1 Ответ

1 голос
/ 10 марта 2019

Я предполагаю, что у вас есть скрипт (вероятно, вызванный через ajax), который выбирает пользователей онлайн для текущего пользователя.Просто добавьте столбец типа 'last_seen_online' с отметкой времени.Обновляйте поле каждый раз, когда пользователь вызывает этот скрипт.Теперь вы можете отфильтровать его в вашем sql, например, получить всех пользователей, которые были в сети в последнюю минуту.- Все, что неактивно, поскольку одна минута считается автономной, как это.

Чтобы избавиться от пользователей, которые перешли в автономный режим, вы можете реализовать сборку мусора (как это делает php с сессиями).Вы захватываете всех пользователей, которых не видели с последних (например) 5 минут.Вы помещаете эту сборку мусора в тот же скрипт.Чтобы держать нагрузку низкой.Вы не звоните каждый раз, как в 50% случаев с if(rand(1,100) > 50) или любым другим процентом, который вам нравится.

...