Среда, 13 Ноября 2024, 14:35

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Временные события на php
EsrДата: Понедельник, 05 Ноября 2012, 19:34 | Сообщение # 1
уже был
Сейчас нет на сайте
Почитал про создание браузерных игр. Возник вопрос, как реализуется события, которые происходят в определенное время. Например, постройка здания. Ведь php скрипт выполняется только, когда человек обращается к странице, а возможности запустить его в определенный момент нет (если брать обычный хостинг, где нету доступа к командой строке и т.д.).
Появилась идея, что можно рассчитывать разницу между текущем временем и время последнего посещения этого игрока. После это можно будет просчитать, какие события произошли в этот период. Но тут возникает много проблем, так как события произошедшие у этого игрока, могут косвенно зависеть от событий другого игрока (соперник напал на тебя). Тогда прийдеться последовательно обходить всех игроков, что может привести к тому, что страница будет грузиться непозволительно долго. Логичнее было бы сделать некий планировщик, но как его сделать нет никаких идей. sad Может кто-то решал уже эту задачу
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, либо как парень писал рассчитывать время между началом и концом, после отображать оставшееся время. smile
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-й век на дворе.

Не вникай в сообщение - пиши негативный комментарий! happy

Я об этом и говорю. Под таймером я вообще имел ввиду другое.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг