[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Создание многопользовательской браузерной онлайн и
Страницы: 1, 2
bestxp
тогда у тебя должен быть фоновый скрипт демона который за "тик" пересчитывает данные, в твоем случае запускает хранимку в бд, которая производит расчет всех данных и так каждый тик,

соотвественно тик может быть определенным периодом например раз в "10" секунд, за которое и идет прибавка ресурса или прочего значения.

То есть в любом случае это должен быть фоновый скрипт, а тут уже несколько вариантов, php демон или какой либо другой, сам смотри что лучше
waldicom
Цитата (damage220 @ 11.11.2013 - 06:00)
А если нужно, чтобы результат действий одного игрока видели все игроки? При этом, делать лишние проверки всем пользователям не совсем рационально с точки зрения экономии ресурсов сервера. Суть примерна в том же: игрок ставит действие на выполнение и покидает сайт. Через час, например, действие выполняется, но изменения должны коснуться всего мира именно в ту секунду, когда и выполнились - нельзя ждать, пока пользователь появиться снова.

И это тоже можно рассчитать на JS. Будет, правда, посложнее, но тоже реализуемо. Т.е. придется весь рассчет не только в БД делать, но еще и передавать все параметры клиенты (javascript), который будет сам рассчитывать и показывать. С каждым новым запросом данные будут обновляться.
Правда надо уточнить, что значит "чтобы результат действий одного игрока видели все игроки"? Если игроков 100 тыщ, то такой подходит будет, как минимум, проблематичным smile.gif А зачем вам говорить всем игрокам, что что-то изменилось?

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
inpost
Зачем другим знать количество твоих ресурсов?
Что-то этот момент не совсем понял. Взаимодействие будет лишь мини-частичным, отсюда хорошо впишется какой-нибудь фоновый веб-сервер на ПХП или node.js (там socket.io добавить ещё, если динамика велика).

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
damage220
Игроки не изолированы друг от друга, они могут воевать. К примеру, взять игру Ogame - космический симулятор. Там игрок может напасть на планету другого игрока, в результате баталии образуется поле обломков и это поле должны видеть все игроки. Если игрок отправит флот на вражескую планету и уйдет с сайта, то глобальные изменения можно будет произвести только тогда, когда он снова появиться в игре.
inpost
Для ресурсов не нужен был фоновый сервер, но сервер нужен для общих событий, которые происходят через Х времени.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
waldicom
Цитата (damage220 @ 11.11.2013 - 17:16)
Если игрок отправит флот на вражескую планету и уйдет с сайта, то глобальные изменения можно будет произвести только тогда, когда он снова появиться в игре.

Еще раз: все события инициируются игроками. Будь то нападение на другую планету или постройки здания.
Я просто не знаю всех тонкостей игры. Но если уж очень нужно, то можно и каждую секунду считать. Вопрос тольк в том, выдержит ли сервер и нужно ли это вообще.
У вас сейчас какая конкретных проблема? Проблема с рассчитывавшем ресурсов решена?

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
damage220
Цитата (waldicom @ 11.11.2013 - 23:54)
Цитата (damage220 @ 11.11.2013 - 17:16)
Если игрок отправит флот на вражескую планету и уйдет с сайта, то глобальные изменения можно будет произвести только тогда, когда он снова появиться в игре.

Еще раз: все события инициируются игроками. Будь то нападение на другую планету или постройки здания.
Я просто не знаю всех тонкостей игры. Но если уж очень нужно, то можно и каждую секунду считать. Вопрос тольк в том, выдержит ли сервер и нужно ли это вообще.
У вас сейчас какая конкретных проблема? Проблема с рассчитывавшем ресурсов решена?

Да, с ресурсами всё ок.
Такая ситуация: игрок атакует планету другого игрока, посылая флот. Этот флот летит n часов, игрок выходит с сайта. Через n часов флот встречает сильное сопротивление и полностью уничтожается(или частично - не важно). В результате на орбите планеты образуется поле обломков. Это поле должны видеть все игроки после битвы. Чтобы его видели, нужна запись в бд с количеством обломков. Количество обломков не константа и зависит от количества оборонительных сооружений, а их количество тоже может измениться за время полета. Выходит расчет нужно вести только во время прилета флота на вражескую планету. Поправьте, если не так.
damage220
Уже подумал, что нашел решение:
Каждая атака - это запись в бд, с временем прибытия. При каждом обновлении страницы, не важно какого игрока, будет находиться те атаки, которые уже прошли и просчитывать результат. Но тут, помимо того, что это крайне ресурсоёмко, если записей много, есть серьезная проблема. Допустим такая битва есть, но она могла пройти и час назад до перезагрузки страницы, нет никакой возможности узнать какая защита было у обороняющегося в тот моммент времени.
waldicom
Цитата (damage220 @ 11.11.2013 - 22:43)
Допустим такая битва есть, но она могла пройти и час назад до перезагрузки страницы, нет никакой возможности узнать какая защита было у обороняющегося в тот моммент времени.

Хм... Ок, в данном случае или рассчитывать все битвы в порядке очереди при любом запроче игрока или действительно вводить фоновый процесс.
Если будете работать с очередью, то обратите внимание на redis. Да, в первую очередь это конечно key-value storage, но он предлагает функцию queue. Или можно взять gearman. В крайне случае реализовать свою очередь. В любом случае головной боли прибавится.
Если вводить фоновый процесс, то все равно надо будет использовать/имплементировать очередь событий.

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
Быстрый ответ:

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