# Ретрансляторы (P2P)

{% hint style="warning" %}
Этот раздел документации находится в процессе разработки и может изменяться.

Не стесняйтесь задавать вопросы или делать запросы через наш [Discord](https://discord.com/invite/NgCnkHbsGp) канал. Мы здесь, чтобы помочь вам!
{% endhint %}

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

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

***

### Зачем нужен ретранслятор в P2P-игре

Сервер-ретранслятор может быть ценным инструментом для разработчиков P2P-игр. В P2P-играх игроки подключаются напрямую друг к другу без центрального сервера. Однако такой подход может создать ряд проблем, например:

#### **Ограничения межсетевого экрана (файрвола)**

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

#### **Жёсткий NAT**

Жёсткий NAT может значительно повлиять на способность игрока участвовать в играх типа P2P. P2P-игры полагаются на прямые соединения между устройствами игроков для обмена данными и игрового процесса, но жёсткий NAT может ограничивать или блокировать такие соединения. Это может привести к увеличенной задержке, разрывам соединения и трудностям при присоединении к играм или организации хостинга.

<figure><img src="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2Fgit-blob-1ff4b2b8740e5c4f621e070e7524b20cb26a52b4%2FTraditional_P2P.png?alt=media" alt=""><figcaption></figcaption></figure>

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

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

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

***

### Сервер против клиента в P2P

В архитектуре одноранговой (P2P) многопользовательской игры один из игроков должен выступать в роли игрового сервера, так как нет выделенного сервера для управления игрой для всех участников. Этот игрок, называемый «сервером», отвечает за управление игровым миром и синхронизацию всей информации между игроками. Остальные игроки ("Client" alt="">

подключаются к серверу напрямую.

***

### Начало работы

#### **Реализуйте лобби или матчмейкер**

Вам потребуется реализовать какую‑то форму лобби или матчмейкера для создания сессий ретрансляции для ваших игроков. Не переживайте: на начальном этапе вам не нужен полностью функциональный матчмейкер, достаточно чего‑то, что будет автоматизировать ваши API-запросы без раскрытия токена в клиенте игры. Рассмотрите возможность использования [#nakama-by-heroic-labs](https://docs.edgegap.com/ru/advanced-features/managed-clusters#nakama-by-heroic-labs "mention") на кластерах Edgegap.

#### **Интеграция с API Edgegap**

После выполнения предыдущего шага вам в основном потребуется совершить два простых действия с помощью API Edgegap: создание сессий ретрансляции и удаление сессий ретрансляции. За реализацию этих действий должен отвечать ваш лобби/матчмейкер, который будет авторизовывать или деавторизовывать доступ игроков к ретранслятору. [Больше информации в этом разделе](https://docs.edgegap.com/ru/learn/distributed-relay/relay-edgegap-api).

#### **Интеграция с существующим транспортным уровнем**

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

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

* [Unity с Mirror Netcode](https://docs.edgegap.com/ru/docs/sample-projects/unity-netcodes/mirror-on-edgegap)
* Сетевой модуль Unreal — скоро
* [Unity Netcode для GameObjects](https://docs.edgegap.com/ru/docs/sample-projects/unity-netcodes/unity-netcode-on-edgegap)
* [Fishnet Networking](https://docs.edgegap.com/ru/docs/sample-projects/unity-netcodes/fishnet-on-edgegap)

#### **(Альтернативно) Реализация собственного транспортного уровня**

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

[Руководство по реализации ретранслятора](https://github.com/edgegap/distributed-relay-examples#relay-implementation-manual)

Если у вас есть вопросы по реализации или вы хотите узнать дорожную карту наших текущих интеграций, не стесняйтесь связаться с нами!
