kio_home | Дата: Воскресенье, 30 Мая 2010, 01:17 | Сообщение # 1 | Тема: Уроки по созданию браузерной игры |
уже был
Сейчас нет на сайте
| Доброго времени суток Достаточно долго искал по интернетам достойное решение следующей проблемы: Пользователь запускает некоторый процесс (для простоты - посылает ресурсы другому игроку в игре), причём результат должен проявиться не сразу, а, например, через 15 минут. Информация о времени завершения записывается в БД и пользователь со спокойной душой уходит спать. Игрок, которому отправили ресурсы, в ближайшие пару лет в игру заходить не собирается. Внимание вопрос: по какому событию лучше всего обработать приход ресурсов? Насколько я понимаю есть несколько решений: 1. Запустить cron или любое другое приложение на сервере которое будет через какой-либо промежуток времени дёргать php скрипт, который в свою очередь всю эту байду будет обрабатывать. (в этом решении меня смущают непонятки с выбором интервала времени, тк если взять маленький интервал очевидно всё повиснет (в логике моего рассуждения при каждом вызове скрипта мы можем обрабатывать события с временем <= настоящему, иначе при следующем вызове скрипта могут добавиться с "временем смерти" более ранним и повлиять на ход событий нами уже выполненных), а при большом интервале пользователю придётся ждать пока наш скрипт обработает событие, что по логике игры нонсенс + я не нашёл нормального программного решения дёргалки, но это меня меньше всего смущает) 2. Запускать скрипт при любом косвенном или прямом упоминании о любом из этих игроков или о данной операции конкретно. В некоторый момент это всё равно сводится к первому варианту, тк при отсутствии онлайна игроков (а нам интересна именно эта ситуация и отсутствие конфликтов с ситуацией, когда игроки присутствуют) вызываться скрипт чаще всего будет при подведении статистики. 3. Написать приложение, которое с некоторой периодичностью будет подключаться к нашей БД и выполнять все необходимые манипуляции (более элегантное решение варианта 1, но при этом вопрос об интервалах сохраняется). Написал немного сумбурно, но я думаю, что суть вопроса ясна. Если кто сталкивался с данной проблемой, не могли бы вы тут или в ЛС оставить некоторые комментарии. Если решение варьируется в зависимости от количества таких событий будем считать, что событий, одновременно хранящихся в БД с совпадающем "временем смерти", около 10^4, пользователей около 5*10^4, минимальный интервал времени - секунда.
Сообщение отредактировал kio_home - Воскресенье, 30 Мая 2010, 01:21 |
|
| |