Peer-to-peer

Это экспериментальная функция, она может быть изменена и может содержать ошибки. Мы будем рады вашим отзывам об улучшении этой функции.

GDevelop поддерживает одноранговые (P2P) соединения для обеспечения возможности создания основных многопользовательских игр. Это работает через концепцию удаленных событий. Подключите несколько экземпляров игры, используя их ID , перед удаленным запуском событий на других экземплярах.

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

Таким образом, сложно проверить, читерит ли кто-то (в отличие от выделенных серверов). P2P поддерживает до 250 одновременных подключений и поэтому также не подходит для крупных многопользовательских игр, таких как MMO.


Выбор брокерского сервера

Работающая игра, называемая клиентом , должна подключиться к другим клиентам, прежде чем сможет отправлять данные. Для этого ему нужен способ самоидентификации и поиска других клиентов. Для этого необходимо настроить сервер-брокер . Это сервер с фиксированным хорошо известным адресом, который хранит все адреса подключенных клиентов и передает их каждому клиенту, чтобы они могли подключаться друг к другу.

Есть два варианта настройки брокерского сервера:

  • Настройка собственного сервера (рекомендуется), который можно запустить на локальном компьютере в качестве теста.
  • Использование общедоступного сервера по умолчанию.

Настроить собственный (локальный) сервер

Локальный сервер можно легко настроить.[Node.js] (https://nodejs.org/en/download/) для начала необходимо будет установить Node.js. Рекомендуется версия LTS.

Откройте командную строку. Для этого в Windows:

  1. Нажмите клавиши Windows и R . Откроется окно Выполнить
  2. Введите cmd во всплывающем окне.
  3. Нажмите клавишу Enter .

После открытия командной строки выполните следующие действия:

  1. Если эти шаги выполняются впервые, для установки сервера введите npm install peer -g
  2. После установки сервера и каждый раз (для запуска сервера) вводите peerjs -p <порт>
    • Можно использовать любой порт, который еще не используется компьютером.

На сервер PeerJS можно передать и другие параметры, см. [Его веб-сайт] (https://github.com/peers/peerjs-server#config--cli-options) для получения дополнительной информации. После выполнения вышеуказанного действия используется для подключения к серверу действие Использовать настраиваемый брокер сервер .

  • localhost можно использовать в качестве адреса хоста для указания на локальный сервер.
Обратите внимание, что это локальный сервер, поэтому он будет работать только в пределах вашей локальной сети. При выпуске игры вам нужно будет развернуть ее на хостинге, совместимом с Node.js, например Heroku.


Использовать сервер по умолчанию

Не рекомендуется использовать этот сервер, по возможности следует использовать собственный. Сервер по умолчанию не управляется GDevelop, и команда GDevelop не несет ответственности, если что-то пойдет не так с использованием этого сервера.

Вы также можете использовать сервер по умолчанию, предоставленный PeerJS. Чтобы использовать этот сервер, используйте действие «Использовать сервер по умолчанию».

Подключение

Чтобы подключить экземпляры между собой, вам нужно ввести ID одного экземпляра в другом. Идентификатор можно найти с помощью выражения P2P :: GetID (). Для подключения используйте действие «Подключиться к другому экземпляру» и передайте в качестве параметра идентификатор другого экземпляра. Оба экземпляра подключатся автоматически. Затем вы можете отправить событие из одного экземпляра в другой, чтобы убедиться, что соединение установлено.

Взаимодействие с подключенными играми

После подключения вы можете запускать действия удаленно. Вы можете выбрать другой конкретный экземпляр игры (используя его идентификатор) или отправить событие всем подключенным экземплярам.

Выбор режима (с потерей данных и без)

  • В режиме no dataloss каждое удаленное событие ставится в очередь, и на каждом кадре, если оно есть в очереди, мы берем самое старое и обрабатываем его. Это гарантирует, что все данные будут обработаны / приняты во внимание.
  • При активированном режиме dataloss данные не ставятся в очередь, а сохраняются только последние удаленные события. Это означает, что обрабатываются только самые свежие данные, а устаревшие данные удаляются.

Вот два примера:

  • если вы используете синхронизированный счетчик очков, вы не хотите терять какие-либо данные, так как отсутствие только одного значения счетчика приведет к десинхронизации счетчиков, поэтому режим потери данных будет деактивирован.
  • Если вы хотите синхронизировать позиции, актуальна только последняя отправленная позиция, а не более старые позиции. В этом случае вы должны активировать режим потери данных , чтобы предотвратить задержки / ошибки.