Скрипт, который выполнялся бы постоянно на сервере
| |
musicfuns | Дата: Воскресенье, 30 Ноября 2014, 10:44 | Сообщение # 1 |
Gorilla Develop Studio
Сейчас нет на сайте
| Пишу небольшой сайт и вот возник вопрос. Нужно как-то реализовать скрипт, который для всех занесенных в базу mysql пользователей изменял бы значение, скажем "balance", по формуле "Balance" = "balance" + "power". То есть, чтобы это изменение происходило ежесекундно, так чтобы скрипт работал постоянно. Сайт написан на php, но такое на php не реализовать, по-моему, так как php скрипт выполняется только при запросе пользователя, а мне требуется постоянное выполнение скрипта. Как реализовать?
|
|
| |
lvovand | Дата: Воскресенье, 30 Ноября 2014, 10:57 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| можно сделать скрипт кторый будет фоном на сервере запущен, но так ли уж надо каждую секунду что-то изменять? пользователь обновил страницу -получил необходимые данные, в базу записать время последнего отсчета, и в следующий раз посчитать баланс с учетом этого времени
на странице пользователя можно аяксом дергать скрипт, пересчитывающий баланс, чтобы у пользователя обновлялся текущий баланс
Разработка и продвижение сайтов. Дизайн
|
|
| |
WTALKER | Дата: Воскресенье, 30 Ноября 2014, 10:58 | Сообщение # 3 |
постоянный участник
Сейчас нет на сайте
| тоже интересует
но предположу иной вариант - хранить на сервере разницу во времени активности игрока, и когда игрок войдёт на сервер - вычислить сколько он заработал по истичении серверного времени
|
|
| |
musicfuns | Дата: Воскресенье, 30 Ноября 2014, 11:24 | Сообщение # 4 |
Gorilla Develop Studio
Сейчас нет на сайте
| В общем попробую набросать скрипт, который считал бы разницу между временем, когда пользователь заходил на сайт, то бишь то, что заносится в базу и текущим и оттуда по кол-ву секунд преумножить баланс. Впринципе можно и cron применить, а под крон написать скрипт через for например, который бы увелчичивал всем пользователям баланс. Но вот как себя будет вести этот скрипт, когда пользователей станет много, это уже получается огромная нагрузка на сервер
|
|
| |
lvovand | Дата: Воскресенье, 30 Ноября 2014, 11:33 | Сообщение # 5 |
старожил
Сейчас нет на сайте
| ну а что там уж такая дикая формула, чтобы слишком сервер напрягался? крон как вариант, но крон не вызовешь чаще чем раз в минуту
я бы, наверно сделал как во многих игрушках - баланс отрисовывается, но чтобы зачислился, надо отдельно кликнуть, чтобы его забрать. А когда уже идет запрос на сборку, то проверить, еще разок все пересчитать и тогда зачислить уже его игроку
Разработка и продвижение сайтов. Дизайн
|
|
| |
musicfuns | Дата: Воскресенье, 30 Ноября 2014, 11:50 | Сообщение # 6 |
Gorilla Develop Studio
Сейчас нет на сайте
| lvovand, сайт не игровой, то бишь баланс - реальные деньги, желательно, чтобы обновлялся по чаще, ну думаю, что раз в минуту мне будет хватать. Цитата я бы, наверно сделал как во многих игрушках - баланс отрисовывается, но чтобы зачислился, надо отдельно кликнуть, чтобы его забрать. А когда уже идет запрос на сборку, то проверить, еще разок все пересчитать и тогда зачислить уже его игроку по-сути, принцип его работы будет примерно такой же как и.. Цитата В общем попробую набросать скрипт, который считал бы разницу между временем, когда пользователь заходил на сайт, то бишь то, что заносится в базу и текущим и оттуда по кол-ву секунд преумножить баланс.
|
|
| |
Assasin | Дата: Воскресенье, 30 Ноября 2014, 17:20 | Сообщение # 7 |
web-coder
Сейчас нет на сайте
| Цитата musicfuns ( ) Впринципе можно и cron применить, а под крон написать скрипт через for например т.е. на каждого пользователя по 1 sql запросу?
|
|
| |
musicfuns | Дата: Понедельник, 01 Декабря 2014, 10:08 | Сообщение # 8 |
Gorilla Develop Studio
Сейчас нет на сайте
| Assasin, да, я уже примерный скрипт написал, но пока проблема в том, что прибавляет он только один раз, не знаю пока как исправить: Код <?php include_once "conf.php"; $max_id = $baze->query("SELECT * FROM `users`")->num_rows; for ($i=1; $i<=$max_id; $i++) { $balance = $baze->query("SELECT balance FROM users WHERE id_user = '".$i."' ")->fetch_assoc(); $ghs = $baze->query("SELECT ghs FROM users WHERE id_user = '".$i."' ")->fetch_assoc(); $balance += $ghs;
mysqli_query($baze, "UPDATE `users` SET `balance`='".$balance."' WHERE id_user='".$i."'");
mysqli_query($baze, "UPDATE `users` SET `balance`='".$balance."' WHERE id_user='".$i."'"); echo "<p> Изменен баланс = ".$balance." для пользователя ID = ".$i." </p>";
}
?>
|
|
| |
lvovand | Дата: Понедельник, 01 Декабря 2014, 11:07 | Сообщение # 9 |
старожил
Сейчас нет на сайте
| как-то уж совсем примерно, зачем вообще тогда пользователей вынимаешь? делай сразу
UPDATE `users` SET balance=balance+qhs WHERE //тут если надо условие
ну а то что выполняется один раз логично, сколько должен выполняться?
поставь например в вечном цикле этот апдейт, а в конце каждой итерации задержку на несколько секунд и запусти скрипт в фоне, ну или кроном вызывать этот скрипт раз в минуту
Разработка и продвижение сайтов. Дизайн
|
|
| |
Assasin | Дата: Понедельник, 01 Декабря 2014, 20:05 | Сообщение # 10 |
web-coder
Сейчас нет на сайте
| lvovand, верно подмечено. Только в вечном цикле лучше не запускать, довольно часто будут запросы идти, будет лучше кроном.
|
|
| |
Vinchensoo | Дата: Понедельник, 01 Декабря 2014, 20:13 | Сообщение # 11 |
Злобный социопат с комплексом Бога
Сейчас нет на сайте
| Это кошернее реализовать с помощью хранимых процедур и запуска их по таймеру(любым SQL планировщиком). Не уверен, что можно сделать на всех СУБД, но на мускуле вроде можно
|
|
| |
Assasin | Дата: Понедельник, 01 Декабря 2014, 20:48 | Сообщение # 12 |
web-coder
Сейчас нет на сайте
| Тоже вариант, но я думаю он не для новичка, глядя на код я могу предположить что musicfuns явно новичек.
|
|
| |
musicfuns | Дата: Вторник, 02 Декабря 2014, 11:45 | Сообщение # 13 |
Gorilla Develop Studio
Сейчас нет на сайте
| Блин, это я накосячил Даже мой код был рабочий, я в phpmyadmin тип переменной decimal выставил (0,10) случайно, вот переменная и не становилась больше 0.99999. Пардон)
|
|
| |
falcoware | Дата: Вторник, 02 Декабря 2014, 13:37 | Сообщение # 14 |
старожил
Сейчас нет на сайте
| musicfuns, может на крон посадить апача?
|
|
| |
lvovand | Дата: Вторник, 02 Декабря 2014, 14:14 | Сообщение # 15 |
старожил
Сейчас нет на сайте
| falcoware, а причем тут апач?
Разработка и продвижение сайтов. Дизайн
|
|
| |
falcoware | Дата: Вторник, 02 Декабря 2014, 14:30 | Сообщение # 16 |
старожил
Сейчас нет на сайте
| lvovand, сайт на ПХП, ПХП на Апаче. Крон на Апаче.
|
|
| |
lvovand | Дата: Вторник, 02 Декабря 2014, 15:05 | Сообщение # 17 |
старожил
Сейчас нет на сайте
| falcoware, или я схожу с ума, или мир вокруг )) какой крон на апач? апач - сервер, чтобы сайт работал, апач запущен постоянно и ждет обращений.
А тот php-скрипт, который будет кроном запускаться, - это отдельная песня и апач не причем
Разработка и продвижение сайтов. Дизайн
|
|
| |
maker-rus | Дата: Вторник, 02 Декабря 2014, 15:12 | Сообщение # 18 |
Гений
Сейчас нет на сайте
| Если я не ошибаюсь, то последняя версия php - включает свой сервер, к которому можно обращаться c сокетами, как аналог node.js. Поищи в интернете информацию по этому поводу.
|
|
| |
falcoware | Дата: Вторник, 02 Декабря 2014, 15:25 | Сообщение # 19 |
старожил
Сейчас нет на сайте
| lvovand, ya right! Но мы друг друга поняли.
|
|
| |
uberchel | Дата: Суббота, 28 Февраля 2015, 05:46 | Сообщение # 20 |
частый гость
Сейчас нет на сайте
| Цитата falcoware ( ) lvovand, сайт на ПХП, ПХП на Апаче. Крон на Апаче. ахах, как винда на линуксе, так и крон на апаче )
// скоро тут что нибудь появится )
|
|
| |
|