В онлайн-играх люди предпочитают входить и выходить из системы в любое время. Обычно их игровые достижения легко сохраняются на сервере. Это не так сложно достичь, но мне интересно, как это можно сделать эффективным способом, который имеет смысл и масштабируется.
Имеет ли смысл сохранять координаты и состояние игрока при каждой отправке? Мой сервер node.js может сделать это легко, не блокируя ответ, и я хочу использовать базу данных Mongo, но, возможно, более уместно делать это один раз в секунду и в общесерверном событии, собирая все сразу?
Ответы:
Я имею в виду традиционную MMORPG, такую как World of Warcraft.
Сохранить после каждой команды от каждого игрока и автономной вещи (например, NPC)
Периодически сохраняйте все
Сохранить персонажа при выходе из системы (больше ничего не сохранять)
Заключительные мысли
Наконец, не принимайте этот совет как абсолютную правду. Я не написал многопользовательскую систему резервного копирования. Я работаю над онлайновой «игрой», поэтому я подумал об этом и изложил свои мысли выше, но я еще не дошел до стадии реализации этого. Так что это написано без реального опыта, но после большого чтения и сбора знаний по теме.
источник
Я предполагаю, что это зависит от типа игры и количества трафика между игроками и сервером.
В MMORPG не имеет смысла сохранять позиции игроков каждый раз, когда они отправляют информацию на сервер. Было бы более целесообразно обновлять данные, если, так сказать, текущие данные игрока «устаревшие». Также может быть полезно сохранить состояние игрока на таких важных событиях, как переход на новую территорию, победа над боссом или выход из магазина.
В пошаговой игре, безусловно, имеет смысл сохранять состояние игрока каждый раз, когда он заканчивает свой ход, а также после хода противника (сохранить потерю здоровья, эффекты заклинаний и т. Д.).
Опять же, ответ полностью зависит от масштаба и возможностей вашего сервера. Все дело в том, чтобы найти наилучший баланс и максимально оптимизировать, не жертвуя качеством.
источник
Если ваша единственная забота - когда они выходят из системы, тогда один простой ответ - сохранить свою позицию, когда возникнут какие-либо условия для них, больше не существующие в игровом мире (из-за выхода из системы или отключения).
В дополнение к этому, я бы несколько опасался, когда клиент сообщает серверу о своей позиции, или, по крайней мере, без какой-либо проверки работоспособности на стороне сервера. Если у вас уже есть это, вы можете сохранить эту позицию при выходе или отключении, так как вам не нужно беспокоиться о получении каких-либо данных от клиента напрямую.
источник