Написание игровой логики в Firebase - PullRequest
0 голосов
/ 05 октября 2019

Я занимаюсь разработкой множительной настольной игры (очень похожей на шахматы). Я использую Firestore в качестве бэкэнда. Я понимаю, что для предотвращения мошенничества в игре мне нужно поместить игровую логику (проверить правильные ходы, изменить ход, таймер обратного отсчета) на стороне сервера, а не на стороне клиента. Теперь, насколько я понимаю, в Firebase есть в основном два места для настройки поведения на стороне сервера: облачные функции и правила безопасности. Я думал об использовании правил безопасности для проверки ходов и облачной функции, чтобы переворачивать повороты и отсчитывать время. У меня нет большого опыта работы с правилами безопасности, но я думаю, что написание правил для проверки ходов было бы слишком сложным. В качестве альтернативы я подумал о том, чтобы запретить всем клиентам доступ на запись в Firestore и написание облачных функций HTTPS для вызова клиентом. Например, у меня была бы функция для движения. Клиент будет вызывать эту функцию вместо прямой записи в Firestore. Я не уверен, как это сделать. Что ты думаешь?

1 Ответ

2 голосов
/ 05 октября 2019

Как вы сказали, есть две широкие возможности:

  1. Проверка перемещения в правилах безопасности.
  2. Проверка перемещения в облачных функциях.

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

Так что для более сложных правил игры я обычно предпочел бы, чтобы код применял их в форме облачных функций. Таким образом, в этом случае:

  1. Клиент записывает «ход игры» в базу данных.
  2. Структура этого хода игры подтверждается правилами безопасности.
  3. Операции записи запускают облачную функцию.
  4. Эта облачная функция интерпретирует ход игры и обновляет игровое состояние.
  5. Все клиенты затем видят новое игровое состояние.

Игра Дуга Стивенсона из Firebase - хороший доклад, демонстрирующий этот подход на Google I / O 2017: Архитектура для борьбы с данными в мире реального времени с Firebase . Хотя он использует базу данных Firebase Realtime там (так как Firestore еще не был выпущен), такой же подход применяется к Cloud Firestore.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...