Меня всё мучает вопрос, как в обычных браузерных играх, в играх в соц.сетях реализуется выполнение задач по времени: постройка юнитов, зданий, отправка юнитов.
Есть задание, есть время когда оно должно выполниться. Но всё это должно выполняться в реальном времени. Т.е. вне зависимости от того есть я или нет меня в игре, мои противники все равно увидят результат.
Какие инструменты и способы существуют для решения подобных задач?
Как-то потребовалось создать модуль для браузерной игры, отвечающий за восстановления уровня жизни персонажа. Задача решилась денормализацией БД — добавил поле hp_last_update. Значение данного поля обновлялось при каждом обращении к объекту пользователя, вне зависимости от того есть он в сети или нет. А дальше уже дело техники — у нас есть текущее значение уровня жизни и максимально допустимое, а также скорость ее восстановления. С помощью несложной формулы мы, при следующем обновлении, можем подсчитать на сколько должен был восстановиться уровень жизни с момента предыдущего обновления и меняем данный параметр. Подобный метод применим и к другим игровым объектам.
Да, только при обращении. Этого достаточно, в принципе. Если к объекту обратились, то рассчитываем новые значения, а если никто не обращался, то и грузить систему лишний раз незачем.
Отдельная таблица для текущих задач с полем времени выполнения. По необходимости проверяется время если оно подошло то, задача выполняется. Выполненную задачу лучше удалять (хотя зависит от ситуации).
За абсолютным «реалтайм» не гонитесь — это не достижимо, погрешности будут всегда.
Нужно делать 2 вещи:
1. да, отдельное поле в бд или таблица
2. для реалтайма — frontend скрипт (js или flash не важно) который сам будет проверять завершено задание или нет.
Тут даже крон не нужен и реалтаймом попахивать будет.