Многопользовательский игровой сервер, структура клиентской базы данных

У меня был общий вопрос о том, как хранятся игровые данные для многопользовательских игр. Предметы и персонажи имеют базовую статистику, а также статистику, полученную во время игры с помощью улучшений и т. д.

Я хотел бы сохранить полученную статистику в серверной базе данных, но я не был уверен в базовом значении. Специально для мобильной игры я подумал, что объем данных, передаваемых туда и обратно, должен быть максимально уменьшен.

Будет ли плохой идеей хранить эти базовые значения для элементов / персонажей на стороне клиента, используя сборный / скриптовый объект (я использую Unity)? Битва будет происходить на стороне клиента, и сервер в основном обрабатывает чтение / запись в базу данных игровых данных игрока. Основным взаимодействием между игроками будет не битва в реальном времени между игроками, а нечто похожее на столкновение кланов.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
0
0
1 176
2

Ответы 2

На мой взгляд, есть два способа сделать это правильно:

Храните только базовые элементы на стороне клиента. Если вы захотите обновить их позже, вам придется опубликовать новую сборку вашего проекта, но вам не нужно делать веб-запросы.

Храните базовые элементы на стороне сервера. Вы можете сохранить их в своей базе данных и позволить клиенту получать их, т.е. когда игра запускается. Таким образом, у каждого подключенного игрока всегда будет текущая базовая статистика.

Другая возможность, в зависимости от объема вашего проекта, - иметь две базы данных. Один на сервере и один на стороне клиента. Затем, каждый раз, когда игра запускается, вы проверяете свой сервер на наличие обновлений (вы можете использовать какую-то контрольную сумму или номер версии, чтобы упростить это).

Что я бы сделал, так это обеспечил бы децентрализованную или распределенную базу данных, имел бы источник истины, где базовые элементы всегда доступны там, на глобально реплицированной основе (при условии, что это имеет значение), а затем попросил бы клиента также реализовать собственный локальный кеш (как это делает React), где необходимые данные хранятся в локальной БД, которая синхронизируется с удаленной БД. Игровой клиент теперь общается только с локальной БД, а умение синхронизировать и т. д. Оставлено на уровне БД, что значительно упрощает код вашего приложения.

Другие вопросы по теме