[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Создание многопользовательской браузерной онлайн и
Страницы: 1, 2
damage220
Собственно, интересует любая литература по данному вопросу. Если конкретно, то не знаю как справиться с такой нагрузкой, опыта не было совсем. Подскажите куда смотреть: node.js, phpDaemon?
Если совсем конкретно, подскажите как реализовать следующее:
Допустим у нас есть фабрики, которые добывают необходимые ресурсы, продуктивность которых постоянно растет. Как сделать, чтобы пользователь в реальном времени видел сколько у него ресурсов? Предположим, через Ajax можно сделать запрос к бд, но и бд в таком случае будет слишком нагружена, ведь каждую секунду придется делать запрос, да и пользователь не один.
waldicom
Высчитывать через JS, возможно временами корректируя значения через ajax (хотя в этом большой необходимости нет).

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
bposter
Кеш нельзя зделать на 30сек или 1 мин?

_____________
Вязание xe4.ru спицами.
Сайт для тестов (подопытный №543)
inpost
damage220
Запускаешь на JS обычный Интервал и увеличиваешь ресурсы не обращаясь к реальным показателям. А когда пытаешься что-то заказать или построить - 1 раз пересчитываешь в момент работы с данными, достаточно проверить период между прошлой проверкой и новой проверкой.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
damage220
Цитата (waldicom @ 10.11.2013 - 23:33)
Высчитывать через JS, возможно временами корректируя значения через ajax (хотя в этом большой необходимости нет).

Но данные и в бд нужно заносить.
damage220
Цитата (inpost @ 10.11.2013 - 23:52)
damage220
Запускаешь на JS обычный Интервал и увеличиваешь ресурсы не обращаясь к реальным показателям. А когда пытаешься что-то заказать или построить - 1 раз пересчитываешь в момент работы с данными, достаточно проверить период между прошлой проверкой и новой проверкой.

Чтобы было нагляднее приведу пример. Есть фабрика по производству металла. Текущий уровень 2, например. Выработка в секунду 20 единиц. В бд храним текущий уровень, дату апгрейда и количество ресурсов на моммент апгрейда. При запросе страницы выбираем количество ресурсов + добавляем сколько с моммента апгрейда накопилось. Отдаем жс уровень апгрейда и делаем юзерфрендли интерфейс. Вроде и работает как хотел и нагрузки на бд нету, только при обновлении страницы, что никак не критично. Ничего не пропустил?
waldicom
Цитата (damage220 @ 10.11.2013 - 20:56)
Цитата (waldicom @ 10.11.2013 - 23:33)
Высчитывать через JS, возможно временами корректируя значения через ajax (хотя в этом большой необходимости нет).

Но данные и в бд нужно заносить.

В этом и прикол, что не нужно. Точнее говоря обновление данных должно происходить только при обращении клиента к базе. База пусть сама считает выработку. Клиенту показывать только рассчитанные на js данные

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
damage220
Цитата (waldicom @ 11.11.2013 - 00:45)
Цитата (damage220 @ 10.11.2013 - 20:56)
Цитата (waldicom @ 10.11.2013 - 23:33)
Высчитывать через JS, возможно временами корректируя значения через ajax (хотя в этом большой необходимости нет).

Но данные и в бд нужно заносить.

В этом и прикол, что не нужно. Точнее говоря обновление данных должно происходить только при обращении клиента к базе. База пусть сама считает выработку. Клиенту показывать только рассчитанные на js данные

Не могли бы вы прокомментировать сообщение выше? Это вписывается в вашу логику или я чего-то не понял?
inpost
Да, только уровень может измениться, отсюда при изменении уровня можно сделать дополнительный запрос на пересчёт, а в целом - именно так всё и работает. Только мааааленькое уточнение, что вывод на JS необходимо делать не с учётом каждого фрейма, а именно относительно времени, так как setInterval (timeout) свойственно ускоряться или наоборот замедляться при определённых условиях.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
damage220
Цитата (inpost @ 11.11.2013 - 01:15)
Да, только уровень может измениться, отсюда при изменении уровня можно сделать дополнительный запрос на пересчёт, а в целом - именно так всё и работает. Только мааааленькое уточнение, что вывод на JS необходимо делать не с учётом каждого фрейма, а именно относительно времени, так как setInterval (timeout) свойственно ускоряться или наоборот замедляться при определённых условиях.

Мы плавно перешли ко второму вопросу про изменение уровня) Я скопировал с другого источника:
Другая проблема заключается в том, что постройки могут улучшаться, и изменения в первую очередь должны отрожаться в бд: уровень апгрейда, количество вырабатываемого ресурса за единицу времени. Такие изменения нельзя сделать когда пользователь снова зайдет на сайт(если он его покинул), т.к. расчет ресурсов по формуле будет не верным. Собственно вопрос, как повесить выполнение скрипта на определенное время. Cron? Есть ли решение на чистом php?
waldicom
Цитата (damage220 @ 10.11.2013 - 22:30)
Мы плавно перешли ко второму вопросу про изменение уровня) Я скопировал с другого источника:
Другая проблема заключается в том, что постройки могут улучшаться, и изменения в первую очередь должны отрожаться в бд: уровень апгрейда, количество вырабатываемого ресурса за единицу времени. Такие изменения нельзя сделать когда пользователь снова зайдет на сайт(если он его покинул), т.к. расчет ресурсов по формуле будет не верным. Собственно вопрос, как повесить выполнение скрипта на определенное время. Cron? Есть ли решение на чистом php?

А почему нельзя? Математически я тут проблем не вижу. Если у нас есть таблица соответствия "уровень постройки"="добыча в час", то нет проблем рассчитать правильную добычу в любой промежуток времени. И крон в данном случае не нужен.

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
damage220
Цитата (waldicom @ 11.11.2013 - 01:41)
Цитата (damage220 @ 10.11.2013 - 22:30)
Мы плавно перешли ко второму вопросу про изменение уровня) Я скопировал с другого источника:
Другая проблема заключается в том, что постройки могут улучшаться, и изменения в первую очередь должны отрожаться в бд: уровень апгрейда, количество вырабатываемого ресурса за единицу времени. Такие изменения нельзя сделать когда пользователь снова зайдет на сайт(если он его покинул), т.к. расчет ресурсов по формуле будет не верным. Собственно вопрос, как повесить выполнение скрипта на определенное время. Cron? Есть ли решение на чистом php?

А почему нельзя? Математически я тут проблем не вижу. Если у нас есть таблица соответствия "уровень постройки"="добыча в час", то нет проблем рассчитать правильную добычу в любой промежуток времени. И крон в данном случае не нужен.

Уже принялся расписывать пол страницы и вдруг понял, что не указал главного. Апгрейд не мгновенный, а может длиться хоть целый день.
waldicom
Цитата (damage220 @ 10.11.2013 - 23:05)
Уже принялся расписывать пол страницы и вдруг понял, что не указал главного. Апгрейд не мгновенный, а может длиться хоть целый день.

Я это понял, и все же настаиваю на том, что проблем рассчитать это нет. У нас есть все данные, чтобы на любой момент времени сказать, сколько ресурсов есть сейчас.
Примерно набросаю возможный алгоритм.
На данный момент есть:
1. Последний заход пользователя на сайт в 10:00
2. 100 ресурсов на тот момент
3. 4 фабрики по 20 ресурсов/час (всего 80 ресурсов/час)
4. четвертая фабрика начала развитие до следуюзего уровня в 13:45 и закончится в 14:45 (добыча на новом уровне = 30 ресурсов/час). Начиная с 14:45 ежечасная добыча ресурсов будет не 80, а 90 (3 фабрики * 20 рес/час + 1 фабрика * 30 рес/час).

Примерно понятно, что я имею ввиду?

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
waldicom
Значит, когда в 16:30 пользователь зайдет на страницу у него будет:
100 + (3 * 20 * (16:30 - 10:00)) + (1 * 20 * (14:45-10:00) ) + (1 * 30 * (16:30-14:45)) = 100 + 370 + 95 + 55 = 620 ресурсов.

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
damage220
Цитата (waldicom @ 11.11.2013 - 02:20)
Цитата (damage220 @ 10.11.2013 - 23:05)
Уже принялся расписывать пол страницы и вдруг понял, что не указал главного. Апгрейд не мгновенный, а может длиться хоть целый день.

Я это понял, и все же настаиваю на том, что проблем рассчитать это нет. У нас есть все данные, чтобы на любой момент времени сказать, сколько ресурсов есть сейчас.
Примерно набросаю возможный алгоритм.
На данный момент есть:
1. Последний заход пользователя на сайт в 10:00
2. 100 ресурсов на тот момент
3. 4 фабрики по 20 ресурсов/час (всего 80 ресурсов/час)
4. четвертая фабрика начала развитие до следуюзего уровня в 13:45 и закончится в 14:45 (добыча на новом уровне = 30 ресурсов/час). Начиная с 14:45 ежечасная добыча ресурсов будет не 80, а 90 (3 фабрики * 20 рес/час + 1 фабрика * 30 рес/час).

Примерно понятно, что я имею ввиду?

Всё верно, спасибо. А если нужно, чтобы результат действий одного игрока видели все игроки? При этом, делать лишние проверки всем пользователям не совсем рационально с точки зрения экономии ресурсов сервера. Суть примерна в том же: игрок ставит действие на выполнение и покидает сайт. Через час, например, действие выполняется, но изменения должны коснуться всего мира именно в ту секунду, когда и выполнились - нельзя ждать, пока пользователь появиться снова.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.