Здраствуйте. Есть такой интересующий вопрос. Есть допустим браузерная игра, стратегия. Ну стоит там крон для обновления статистики/процессов и действий игроков в виде парсера обьектов. А есть какоенибудь более удобное решение? например в игре 1000 и более игроков(неважно онлайн или нет), каждые 10 минут нужно всё это обновлять(база>парер>база), насиловать сервер постоянно тоже не хочется. Т.е допустим игрок зашел, запустил какойто процесс в 13:00, допустим это производство чегото, по настройке за 10 минут должно произвестись 10 товаров, в 13:10 обновляется и он видит что произвелось 10 товаров. А можно както так сделать чтоб допустим установтиь скорость производства, итд, т.е в потоке, а не парсингом каждые 10 минут, чтоб он могу допустим видеть как каждую минуту прибавляется по товару. Просто также есть другие функции которые может нужно обновлять еще чаще, вплоть до минуты, ну не будеш ведь насиловать сервер каждую секунду. Спасибо кто прочитал.
мы написали демонов для управления объектами. все объекты лежат в соответствующих демонах и обсчитываются там. при изменении данных объект сбрасывается в БД. удобно оперировать объектами на уровне ООП. фронт запрашивает демонов о состоянии объекта и не парится никакими БД и прочим. демоны понимают HTTP.
Записываешь в базу время старта, при обновлении отнимаешь из текущего время базы, умножаешь на "производительность" и показываешь пользователю. Если время процесса закончилось, то делаешь тоже самое, только записываешь в базу сколько создалось товаров. И никаких кронов не нужно... Это делаешь JavaScript, т.е. он считает также как PHP, только на стороне клиента. Код (Text): <?php $start = ...; $performance = 0.5; //Пол товара в секунду $result = round((time() - $start) * $performance); ?> <script type="text/javascript"> var timeStart = <?php echo $start; ?>; var performance = <?php echo $performance; ?>; setInterval(function(){ var result = Math.round((new Date().getTime() / 1000 - timeStart) * performance); document.getElementById('result').innerHTML = 'Сделано: ' + result; }, 500); //Пол секунды для того, чтобы не было отставания в 0.4-0.9 секунды - это заметно. </script> <div id="result">Сделано: <?php echo $result; ?></script> Кстати, если есть толковое начало браузерки, т.е. есть эскизы, сценирий, гемплей. Могу вступить в команду, знания есть, даже на свободных началах за % от доходов.
я не имел ввиду загрузку ramcpu. а время которое например пойдет чтоб парсить кучу данных, которое очень важно.
alex-pro Серверу не нужно знать сколько уже произведено товара, достаточно знать сколько его было и сколько будет. Текущее количество нужно знать пользователю, так пусть его машина это считает. Это правило действует на данные которые должен видеть только пользователь и сервер (без других пользователей, я думаю всем не нужно знать сколько у вас данного товара).