MultiplayerPeer

Наследует: PacketPeer < RefCounted < Object

Наследуется от: ENetMultiplayerPeer, MultiplayerPeerExtension, OfflineMultiplayerPeer, WebRTCMultiplayerPeer, WebSocketMultiplayerPeer

Абстрактный класс для специализированных PacketPeer-ов, используемых MultiplayerAPI.

Описание

Управляет соединением с одним или несколькими удаленными узлами, выступающими в качестве сервера или клиента, и назначает каждому из них уникальные идентификаторы. См. также MultiplayerAPI.

Примечание: Протокол MultiplayerAPI является деталью реализации и не предназначен для использования серверами, отличными от Godot. Он может быть изменен без уведомления.

Примечание: При экспорте в Android обязательно включите разрешение INTERNET в предустановке экспорта Android перед экспортом проекта или использованием развертывания в один клик. В противном случае сетевое взаимодействие любого рода будет заблокировано Android.

Обучающие материалы

Свойства

bool

refuse_new_connections

false

int

transfer_channel

0

TransferMode

transfer_mode

2

Методы

void

close()

void

disconnect_peer(peer: int, force: bool = false)

int

generate_unique_id() const

ConnectionStatus

get_connection_status() const

int

get_packet_channel() const

TransferMode

get_packet_mode() const

int

get_packet_peer() const

int

get_unique_id() const

bool

is_server_relay_supported() const

void

poll()

void

set_target_peer(id: int)


Сигналы

peer_connected(id: int) 🔗

Выдается при подключении удаленного однорангового узла.


peer_disconnected(id: int) 🔗

Выдается при отключении удаленного однорангового узла.


Перечисления

enum ConnectionStatus: 🔗

ConnectionStatus CONNECTION_DISCONNECTED = 0

MultiplayerPeer отключен.

ConnectionStatus CONNECTION_CONNECTING = 1

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

ConnectionStatus CONNECTION_CONNECTED = 2

Этот MultiplayerPeer подключен.


enum TransferMode: 🔗

TransferMode TRANSFER_MODE_UNRELIABLE = 0

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

TransferMode TRANSFER_MODE_UNRELIABLE_ORDERED = 1

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

TransferMode TRANSFER_MODE_RELIABLE = 2

Пакеты должны быть получены, и должны быть предприняты попытки повторной отправки, пока пакеты не будут подтверждены. Пакеты должны быть получены в том порядке, в котором они были отправлены. Самый надежный режим передачи, но потенциально самый медленный из-за накладных расходов. Используйте для критических данных, которые должны быть переданы и получены в определенном порядке, например, срабатывание способности или сообщение в чате. Тщательно обдумайте, действительно ли информация является критически важной, и используйте ее экономно.


Константы

TARGET_PEER_BROADCAST = 0 🔗

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

TARGET_PEER_SERVER = 1 🔗

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


Описания свойств

bool refuse_new_connections = false 🔗

  • void set_refuse_new_connections(value: bool)

  • bool is_refusing_new_connections()

Если true, этот MultiplayerPeer отклоняет новые подключения.


int transfer_channel = 0 🔗

  • void set_transfer_channel(value: int)

  • int get_transfer_channel()

Канал, используемый для отправки пакетов. Многие сетевые API, такие как ENet и WebRTC, позволяют создавать несколько независимых каналов, которые ведут себя, в некотором роде, как отдельные соединения. Это означает, что надежные данные будут блокировать только доставку других пакетов по этому каналу, а упорядочивание будет осуществляться только в отношении канала, по которому отправляется пакет. Использование разных каналов для отправки различных и независимых обновлений состояния является распространенным способом оптимизации использования сети и уменьшения задержки в динамичных играх.

Примечание: Канал по умолчанию (0) фактически работает как 3 отдельных канала (по одному для каждого TransferMode), так что TRANSFER_MODE_RELIABLE и TRANSFER_MODE_UNRELIABLE_ORDERED по умолчанию не взаимодействуют друг с другом. Обратитесь к документации конкретного сетевого API (например, ENet или WebRTC), чтобы узнать, как правильно настроить каналы.


TransferMode transfer_mode = 2 🔗

Способ отправки пакетов целевому пиру. См. метод set_target_peer().


Описания метода

void close() 🔗

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


void disconnect_peer(peer: int, force: bool = false) 🔗

Отключает указанный peer от этого хоста. Если force равен true, то сигнал peer_disconnected не будет отправлен для этого пира.


int generate_unique_id() const 🔗

Возвращает случайно сгенерированное целое число, которое можно использовать в качестве уникального идентификатора сети.


ConnectionStatus get_connection_status() const 🔗

Возвращает текущее состояние соединения.


int get_packet_channel() const 🔗

Возвращает канал, по которому был получен следующий доступный пакет. См. PacketPeer.get_available_packet_count().


TransferMode get_packet_mode() const 🔗

Возвращает режим передачи, который удаленный узел использовал для отправки следующего доступного пакета. См. PacketPeer.get_available_packet_count().


int get_packet_peer() const 🔗

Возвращает идентификатор MultiplayerPeer, отправившего следующий доступный пакет. См. PacketPeer.get_available_packet_count().


int get_unique_id() const 🔗

Возвращает идентификатор этого MultiplayerPeer.


bool is_server_relay_supported() const 🔗

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


void poll() 🔗

Ожидает до 1 секунды для получения нового сетевого события.


void set_target_peer(id: int) 🔗

Устанавливает пир, которому будут отправляться пакеты.

id может быть одним из: TARGET_PEER_BROADCAST для отправки всем подключенным пирам, TARGET_PEER_SERVER для отправки пиру, выступающему в качестве сервера, допустимый идентификатор пира для отправки этому конкретному пиру, отрицательный идентификатор пира для отправки всем пирам, кроме этого. По умолчанию целевой пир — TARGET_PEER_BROADCAST.