Какова логика быстрого сохранения кратковременных данных в БД?
Здравствуйте.
Начал писать игрушку и столкнулся с такой проблемой:
Мне нужно передать от клиента (js) в скрипт (php), как я понял посредством AJAX, две переменные, обозначающие вектор направления (например (1;0) или (-1;1)), а уже в скрипте обработать их и записать в Базу Данных. Проблема в том, что данные сохраняются в БД, а так же результат работы скрипта возвращаемый обратно в JS - работают слишком медленно, а данные меняются очень быстро (движение персонажа).
Просто обрабатывать данные на стороне клиента и передавать чисто результат координат для сохранения - подвергать переменные риску подмены и сохранять ложные результаты.
Моя логика скрипта проста:
При нажатии на клавишу посылаем посредством AJAX в PHP-скрипт данные. Берем данные о текущем местоположении персонажа. Делаем расчет новых координат. Их - сохраняем и возвращаем пользователю для перемещения персонажа.
Вопрос состоит в том, как оптимизировать подобную работу? Ведь можно же.
Просто обрабатывать данные на стороне клиента и передавать чисто результат координат для сохранения - подвергать переменные риску подмены и сохранять ложные результаты.
А по ssl? Для ajax вроде ничего настраивать не надо, да и на сервере настроек тоже немного.
Я не правильно выразился, я имел в виду переменные, хранящиеся у клиента. Но даже так, я не думаю, что это важно - в любом случае мне нужно передавать данные на сервер и сохранять их. Скрипт обработки небольшой, основное время занимает подключение к БД.
Смотря что у вас за БД. Можно посоветовать частично хранить и накапливать данные в сессии, а при удобном случае скидывать их в базу (не очень часто). Вроде в php есть fork процесса. Но лучше подумать над логикой приложения, раз всё так завязано на базу и тормозит.
Как вариант, использовать на стороне сервера что-нибудь, не "созданное чтобы умирать", и хранить все прямо в памяти, и лишь периодически записывать все в базу. Зависит от размера данных, которые необходимо хранить, конечно.
Если без вариантов PHP, тогда да, любой внешний кеш, вроде Redis.
Используй предиктор на стороне сервера. Если предсказанное движение персонажа совпадает с реальным, то его не нужно сохранять в БД (оно будет восстановлено по уже имеющимся данным). Самый примитивный вариант, чтобы ожидаемое направление совпадает с предыдущим. Т.е. сохранять понадобится не каждый "тик" игры, а только те моменты, когда игрок меняет направление движения. Но сохранять придётся направление и временнУю метку.