Как создать скрипт работающий без участия пользователя?
Тут подумал как можно создать что то подобное игр с выводом или игры "Понаехали тут". Почти все они написаны на php. А вопрос заключается в том как сделать так чтобы например каждую секунду прибавлялось к имеющимся деньгам (и естественно даже тогда когда игрока нет в сети). Или например использовал предмет +15 к атаке на 60 минут, как это контролировать? Чтобы именно через 60 мин эффект пропал, ну и естественно удалилась строка в бд?
Крон в этом случае плохое решение. По факту вам надо оперировать только таймерами. Начисление денег за время что не были в игре делается легко. Просто берете разницу между последним начислением и текущем временем и даете денег юзеру сохраняя время начисления. Увеличение атаки можно сделать следующим образом. Например у нас есть таблица с эффектами которые цепляются на юзера. Основная задача этой таблицы - хранить таймпштамп когда этот эффект будет не активен. При активации эффекта мы его добавляем в эту таблицу, а дальше каждый раз когда считаем урон просто проверяем не истекло ли еще время действия эффекта. Проверка будет происходить каждый запрос. Это будет сильно дешевле чем раз в секунду пинать крон, да и более правильно как по мне.
Stanislav Pugachev, Всегда можно кешировать данные. Ну вы скорее всего так и так для идентификации юзера каждый раз лезете в базу. Что вам использовать под капотом, зависит только от того какие нагрузки вы хотите держать. И всегда можно делать сложные выборки одним запросом.
Почитайте о Cron. На сервере пишете скрипт который проверяет информацию об эффектах и бонусы, и сверяет время. Если время прошло - удаляет запись из БД. В крон добавляете задачу запускать скрипт каждые 2 минуты (или как вам надо) и все
Stanislav Pugachev,
Если есть серьезная потребность постоянно мониторить события я бы посоветовал посмотреть в сторону создания службы (демона) которая будет висеть в процессах и слушать заданные события. Если нет жесткого привязки по времени, можно запускать скрипт хоть каждые 5 секунд, но важно отслеживать максимальное время выполнения. Можно создать один скрипт который будет запускать очень часто, сам по себе не будет выполнять никаких операций, а лишь вызвать другие скрипты которые уже будут обрабатывать запросы.