2013-10-07 3 views
0

Я разрабатываю веб-приложение на GAE с использованием веб-фрейма webapp2. Это двухпользовательская игра с несколькими играми одновременно. Сервер действует как путь для передачи игровых данных между двумя компьютерами, а также для проверки его. Клиент связывается с сервером только по HTTP-запросу.Обнаружение, если клиент отключен

Для этого я сделаю таблицу, в которой храню IP-адрес, userId (с помощью куки-файлов) и имя пользователя (если пользователь зарегистрировал) как пользователей, так и адрес для экземпляра игры они играют.

До тех пор пока игра не завершится (победит один из игроков), я бы не удалял запись в таблице, но я понял, что если один (или оба) игрока отключается до окончания игры или возникает сетевая ошибка заставляя одного (или обоих) игроков выйти.

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

+0

имеют определенный процесс для keepalive. http не имеет гражданства. –

+0

@ DanielA.White Я не понимаю. Можете ли вы рассказать мне, как это сделать? – tMJ

ответ

0

Вы можете:

  • добавить last_action = DateTimeProperty(auto_now=true) в модели пользователя
  • добавить ended = DateTimeProperty() в модели игры
  • создать метод, поиск всех пользователей с last_action < now - x minutes, и установить его в настоящее время ended все игры с этими пользователями
  • создать способ удалить все игры завершены с y минутами
  • run это методы периодически через задачи и cron

Но если ваши клиенты могут выполнять JavaScript, лучше взглянуть на channel service.

+0

Спасибо @greg. Мне нужно спросить вас об этом: Не получив ответов ранее, я решил сделать клиент (браузер) опросом сервера каждые пару секунд с помощью XMLHttpRequest. В этом случае, если другой игрок совершил переезд, сервер ответит движением else, просто вернет сообщение о состоянии в строке «Seen». И отметьте, что клиент присутствует. Если клиент пропустил 10 или около того опросов, это будет считаться отключенным. Есть ли лазейка в этом подходе? Это лучше или хуже? Зачем. – tMJ

+0

С вашим подходом, если два игрока отключены (нет нового опроса), ваша игра не будет закончена. – greg

+0

Да, я хочу запустить другой процесс для очистки базы данных время от времени, и мне было интересно, как это сделать. – tMJ

Смежные вопросы