@Whos

Как сделать ежесекундную обработку действий?

Всем привет. Разрабатываю браузерную игру на PHP.
Есть bash скрипт, который запускает определенный PHP-скрипт каждую секунду.

Изначально скрипт был написан так, что регенирирует здоровье игроков:
- Получаем игроков, у которых кого не полное здоровье, добавляем нужное количество, записываем в БД.
Но даже с 50+ активных игроков это занимает немало времени. Ко всему этому мне теперь нужно добавить, чтоб игрок имел баффы (эффект кровотения как пример, который например каждую секунду отнимает опр. кол-во здоровья). На MYSQL это всё очень будет затрано по времени.

Дальше я пришёл к тому, что при старте боя начал записывать копию данных игрока из БД в Redis, и уже скрипт обрабатывал данные из Redis, что в теории должно быть быстрее, но мне все равно не хватает скорости, т.к. теперь каждую секунду в скрипте мне приходится: получать всех игроков, все баффы и т.п. И потом под каждый бафф в цикле уменьшать\увеличивать здоровье игроков. При 50+ активных игроков это занимает больше 0.15 сек времени.
Есть ли способ как-то уменьшить время выполнения? Или может какие-нибудь другие технологии
  • Вопрос задан
  • 202 просмотра
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
Другие технологии, их есть у нас. Называется - просто не делай этого вообще.
Игрок получил повреждения - записываешь в базу, и все, ничего не регенерируешь.
Когда произойдет какое-то новое взаимодействие с игроком - получил новый урон, обновил страницу, или какая там у вас игровая логика, тогда уже, при помощи формулы "прошедшее_время * скорость_регена = сколько_здоровья_оргененило".
С баффами все немножко сложнее, но смысл тот-же - считайте формулой, и в тот момент когда данные нужны, а не в фоновом процессе неведомо зачем.
Ответ написан
@Akina
Сетевой и системный админ, SQL-программист.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы