Временные события на php
| |
Esr | Дата: Понедельник, 05 Ноября 2012, 19:34 | Сообщение # 1 |
уже был
Сейчас нет на сайте
| Почитал про создание браузерных игр. Возник вопрос, как реализуется события, которые происходят в определенное время. Например, постройка здания. Ведь php скрипт выполняется только, когда человек обращается к странице, а возможности запустить его в определенный момент нет (если брать обычный хостинг, где нету доступа к командой строке и т.д.). Появилась идея, что можно рассчитывать разницу между текущем временем и время последнего посещения этого игрока. После это можно будет просчитать, какие события произошли в этот период. Но тут возникает много проблем, так как события произошедшие у этого игрока, могут косвенно зависеть от событий другого игрока (соперник напал на тебя). Тогда прийдеться последовательно обходить всех игроков, что может привести к тому, что страница будет грузиться непозволительно долго. Логичнее было бы сделать некий планировщик, но как его сделать нет никаких идей. Может кто-то решал уже эту задачу
|
|
| |
cougraAcc | Дата: Понедельник, 05 Ноября 2012, 21:05 | Сообщение # 2 |
Яркая личность GD
Сейчас нет на сайте
| cron tab. Пишешь скрипт, который будет совершать эти действия и вешаешь его на крон. Что это и где найти — google.ru
|
|
| |
Esr | Дата: Вторник, 06 Ноября 2012, 09:10 | Сообщение # 3 |
уже был
Сейчас нет на сайте
| cougraAcc, Quote (если брать обычный хостинг, где нету доступа к командой строке и т.д.).
|
|
| |
Gronzo | Дата: Вторник, 06 Ноября 2012, 10:35 | Сообщение # 4 |
почетный гость
Сейчас нет на сайте
| Esr, обычный хостинг - крон есть.
Скорость перебора паролей прямо пропорциональна квадрату температуры утюга
|
|
| |
Шевский | Дата: Вторник, 06 Ноября 2012, 10:56 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| Все будет нормально, если записывать время создания события. То есть мы начинаем строить например здание, записали время начала постройки в базу данных, после этого при каждом обращении к странице проверять есть ли выполняемые в данный момент задачи, то есть чтобы now_time>n+start_time, где start_time - время старта задания, now_time - текущее время и n - длительность выполнения задания. Так делается во многих браузерных играх, для автоматизации можно сделать JS-счетчик на страницах, высчитывающий время до окончания задания, то есть типо: здание строится, осталось 5 минут 16 секунд, а когда достигает 0 - отправлять юзера в нужное место. Вообще для проверки можно поставить setInterval, который каждые N секунд/минут будет проверять выполнилось ли какое-нибудь задание или появилось какое-нибудь событие, например если на игрока напал другой игрок. Проблем никаких не может возникнуть, это самая обычная схема а-ля проверка новых сообщений в WEB-мессенджерах.
|
|
| |
maker-rus | Дата: Вторник, 06 Ноября 2012, 22:29 | Сообщение # 6 |
Гений
Сейчас нет на сайте
| Quote (Шевский) Все будет нормально, если записывать время создания события. То есть мы начинаем строить например здание, записали время начала постройки в базу данных, после этого при каждом обращении к странице проверять есть ли выполняемые в данный момент задачи, то есть чтобы now_time>n+start_time, где start_time - время старта задания, now_time - текущее время и n - длительность выполнения задания. Так делается во многих браузерных играх, для автоматизации можно сделать JS-счетчик на страницах, высчитывающий время до окончания задания, то есть типо: здание строится, осталось 5 минут 16 секунд, а когда достигает 0 - отправлять юзера в нужное место. Вообще для проверки можно поставить setInterval, который каждые N секунд/минут будет проверять выполнилось ли какое-нибудь задание или появилось какое-нибудь событие, например если на игрока напал другой игрок. Проблем никаких не может возникнуть, это самая обычная схема а-ля проверка новых сообщений в WEB-мессенджерах. Так никто не делает. Как ты расписал - это только визуально работает! Стоит обновить страницу как всё заново пойдёт. Лучшее решение как выше написали это CRON, либо как парень писал рассчитывать время между началом и концом, после отображать оставшееся время.
|
|
| |
cougraAcc | Дата: Вторник, 06 Ноября 2012, 22:58 | Сообщение # 7 |
Яркая личность GD
Сейчас нет на сайте
| Quote (Шевский) Все будет нормально, если записывать время создания события. То есть мы начинаем строить например здание, записали время начала постройки в базу данных, после этого при каждом обращении к странице проверять есть ли выполняемые в данный момент задачи, то есть чтобы now_time>n+start_time, где start_time - время старта задания, now_time - текущее время и n - длительность выполнения задания. Так делается во многих браузерных играх, для автоматизации можно сделать JS-счетчик на страницах, высчитывающий время до окончания задания, то есть типо: здание строится, осталось 5 минут 16 секунд, а когда достигает 0 - отправлять юзера в нужное место. Вообще для проверки можно поставить setInterval, который каждые N секунд/минут будет проверять выполнилось ли какое-нибудь задание или появилось какое-нибудь событие, например если на игрока напал другой игрок. Проблем никаких не может возникнуть, это самая обычная схема а-ля проверка новых сообщений в WEB-мессенджерах. Да Вы извращенец, друг мой.
Сообщение отредактировал cougraAcc - Вторник, 06 Ноября 2012, 23:46 |
|
| |
Talco | Дата: Среда, 07 Ноября 2012, 00:11 | Сообщение # 8 |
почетный гость
Сейчас нет на сайте
| Quote (maker-rus) Стоит обновить страницу как всё заново пойдёт. Вероятно, вы не правильно поняли товарища... Quote (maker-rus) Лучшее решение как выше написали это CRON Если был бы доступ к нему, тогда ДА, а тк доступа нет, то это вовсе не решение!
В некоторых случаях можно использовать планировщик mysql... http://www.rldp.ru/mysql/mysqlpro/events.htm А в большинстве случаев, это делается тупой проверкой и пересчетом в момент начала события, и не нужно обходить ВСЕХ игроков, а только тех, которые участвуют в этом событии.
xNova: Революция
Сообщение отредактировал Talco - Среда, 07 Ноября 2012, 01:04 |
|
| |
Шевский | Дата: Среда, 07 Ноября 2012, 18:13 | Сообщение # 9 |
был не раз
Сейчас нет на сайте
| Quote (maker-rus) это только визуально работает Вы вообще о чем? Обычный таймер, который естественно начальное число берет из базы данных. Quote (cougraAcc) Да Вы извращенец, друг мой. Я думаю вы часто ловите себя на мысли, что извращенцы так же и Google, Microsoft да и все мессенджеры, которые только существуют. Ведь есть же другие способы, так ведь?
|
|
| |
cougraAcc | Дата: Среда, 07 Ноября 2012, 18:15 | Сообщение # 10 |
Яркая личность GD
Сейчас нет на сайте
| Quote (Шевский) Я думаю вы часто ловите себя на мысли, что извращенцы так же и Google, Microsoft да и все мессенджеры, которые только существуют. Ведь есть же другие способы, так ведь? Проверка новых сообщений в веб мессенджерах этих компаний основана на технологии "comet". Что никак не связано с js таймером. 21-й век на дворе.
|
|
| |
Шевский | Дата: Среда, 07 Ноября 2012, 18:16 | Сообщение # 11 |
был не раз
Сейчас нет на сайте
| Quote (cougraAcc) Проверка новых сообщений в веб мессенджерах этих компаний основана на технологии "comet". Что никак не связано с js таймером. 21-й век на дворе. Не вникай в сообщение - пиши негативный комментарий!
Я об этом и говорю. Под таймером я вообще имел ввиду другое.
|
|
| |
|