ENetConnection

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

Класс-оболочка для ENetHost.

Описание

Целью ENet является обеспечение относительно тонкого, простого и надежного уровня сетевой связи поверх UDP (протокола пользовательских датаграмм).

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

Методы

void

bandwidth_limit(in_bandwidth: int = 0, out_bandwidth: int = 0)

void

broadcast(channel: int, packet: PackedByteArray, flags: int)

void

channel_limit(limit: int)

void

compress(mode: CompressionMode)

ENetPacketPeer

connect_to_host(address: String, port: int, channels: int = 0, data: int = 0)

Error

create_host(max_peers: int = 32, max_channels: int = 0, in_bandwidth: int = 0, out_bandwidth: int = 0)

Error

create_host_bound(bind_address: String, bind_port: int, max_peers: int = 32, max_channels: int = 0, in_bandwidth: int = 0, out_bandwidth: int = 0)

void

destroy()

Error

dtls_client_setup(hostname: String, client_options: TLSOptions = null)

Error

dtls_server_setup(server_options: TLSOptions)

void

flush()

int

get_local_port() const

int

get_max_channels() const

Array[ENetPacketPeer]

get_peers()

float

pop_statistic(statistic: HostStatistic)

void

refuse_new_connections(refuse: bool)

Array

service(timeout: int = 0)

void

socket_send(destination_address: String, destination_port: int, packet: PackedByteArray)


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

enum CompressionMode: 🔗

CompressionMode COMPRESS_NONE = 0

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

CompressionMode COMPRESS_RANGE_CODER = 1

Встроенное кодирование диапазона ENet. Хорошо работает на небольших пакетах, но не является самым эффективным алгоритмом на пакетах размером более 4 КБ.

CompressionMode COMPRESS_FASTLZ = 2

FastLZ сжатие. Этот вариант использует меньше ресурсов ЦП по сравнению с COMPRESS_ZLIB, за счет использования большей пропускной способности.

CompressionMode COMPRESS_ZLIB = 3

Сжатие Zlib. Этот вариант использует меньшую пропускную способность по сравнению с COMPRESS_FASTLZ, за счет использования большего количества ресурсов ЦП.

CompressionMode COMPRESS_ZSTD = 4

Zstandard сжатие. Обратите внимание, что этот алгоритм не очень эффективен на пакетах размером менее 4 КБ. Поэтому в большинстве случаев рекомендуется использовать другие алгоритмы сжатия.


enum EventType: 🔗

EventType EVENT_ERROR = -1

Произошла ошибка во время service(). Скорее всего, вам придется destroy() хост и создать его заново.

EventType EVENT_NONE = 0

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

EventType EVENT_CONNECT = 1

Запрос на подключение, инициированный enet_host_connect, завершен. Массив будет содержать пир )peer(, который успешно подключился.

EventType EVENT_DISCONNECT = 2

Пир отключился. Это событие генерируется при успешном завершении отключения, инициированного ENetPacketPeer.peer_disconnect(), если истекло время ожидания пира или если истекло время ожидания запроса на подключение, инициализированного connect_to_host(). Массив будет содержать пир, который отключился. Поле данных содержит предоставленные пользователем данные, описывающие отключение, или 0, если ничего не доступно.

EventType EVENT_RECEIVE = 3

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


enum HostStatistic: 🔗

HostStatistic HOST_TOTAL_SENT_DATA = 0

Всего передано данных.

HostStatistic HOST_TOTAL_SENT_PACKETS = 1

Общее количество отправленных UDP-пакетов.

HostStatistic HOST_TOTAL_RECEIVED_DATA = 2

Всего получено данных.

HostStatistic HOST_TOTAL_RECEIVED_PACKETS = 3

Общее количество полученных UDP-пакетов.


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

void bandwidth_limit(in_bandwidth: int = 0, out_bandwidth: int = 0) 🔗

Регулирует ограничения пропускной способности хоста.


void broadcast(channel: int, packet: PackedByteArray, flags: int) 🔗

Ставит в очередь packet для отправки всем пирам, связанным с хостом, по указанному channel. См. константы ENetPacketPeer FLAG_* для доступных флагов пакетов.


void channel_limit(limit: int) 🔗

Ограничивает максимально допустимые каналы будущих входящих подключений.


void compress(mode: CompressionMode) 🔗

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

Примечание: Большинство сетевых схем игр предполагают частую отправку множества небольших пакетов (размером менее 4 КБ каждый). Если вы сомневаетесь, рекомендуется сохранить алгоритм сжатия по умолчанию, так как он лучше всего работает с этими небольшими пакетами.

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


ENetPacketPeer connect_to_host(address: String, port: int, channels: int = 0, data: int = 0) 🔗

Инициирует соединение с внешним address, используя указанный port и выделяя запрошенные channels. Необязательные data могут быть переданы во время соединения в виде 32-битного целого числа.

Примечание: Перед вызовом этого метода необходимо вызвать либо create_host(), либо create_host_bound() на обоих концах.


Error create_host(max_peers: int = 32, max_channels: int = 0, in_bandwidth: int = 0, out_bandwidth: int = 0) 🔗

Создает ENetHost, который допускает до max_peers подключенных одноранговых узлов, каждый из которых выделяет до max_channels каналов, опционально ограничивая пропускную способность до in_bandwidth и out_bandwidth (если больше нуля).

Этот метод привязывает случайный доступный динамический порт UDP на хост-машине к неуказанному адресу. Используйте create_host_bound(), чтобы указать адрес и порт.

Примечание: Для установления соединения необходимо создать хост как на клиенте, так и на сервере.


Error create_host_bound(bind_address: String, bind_port: int, max_peers: int = 32, max_channels: int = 0, in_bandwidth: int = 0, out_bandwidth: int = 0) 🔗

Создает ENetHost, привязанный к заданным bind_address и bind_port, который допускает до max_peers подключенных одноранговых узлов, каждый из которых выделяет до max_channels каналов, опционально ограничивая пропускную способность до in_bandwidth и out_bandwidth (если больше нуля).

Примечание: Для установления соединения необходимо создать хост как на клиенте, так и на сервере.


void destroy() 🔗

Уничтожает хост и все связанные с ним ресурсы.


Error dtls_client_setup(hostname: String, client_options: TLSOptions = null) 🔗

Настройте этот ENetHost для использования пользовательского расширения Godot, разрешающего шифрование DTLS для клиентов ENet. Вызовите это перед connect_to_host(), чтобы ENet подключался с использованием DTLS, проверяя сертификат сервера по hostname. Вы можете передать необязательный параметр client_options, чтобы настроить доверенные центры сертификации или отключить проверку общего имени. См. TLSOptions.client() и TLSOptions.client_unsafe().


Error dtls_server_setup(server_options: TLSOptions) 🔗

Настройте этот ENetHost для использования пользовательского расширения Godot, разрешающего шифрование DTLS для серверов ENet. Вызовите его сразу после create_host_bound(), чтобы ENet ожидал, что пиры будут подключаться с использованием DTLS. См. TLSOptions.server().


void flush() 🔗

Отправляет все поставленные в очередь пакеты на указанном хосте своим назначенным одноранговым узлам.


int get_local_port() const 🔗

Возвращает локальный порт, к которому привязан данный одноранговый узел.


int get_max_channels() const 🔗

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


Array[ENetPacketPeer] get_peers() 🔗

Возвращает список пиров, связанных с этим хостом.

Примечание: Этот список может включать некоторые пиры, которые не полностью подключены или все еще отключаются.


float pop_statistic(statistic: HostStatistic) 🔗

Возвращает и сбрасывает статистику хоста.


void refuse_new_connections(refuse: bool) 🔗

Настраивает сервер DTLS на автоматическое удаление новых подключений.

Примечание: Этот метод актуален только после вызова dtls_server_setup().


Array service(timeout: int = 0) 🔗

Ожидает событий в этом соединении и пересылает пакеты между хостом и его одноранговыми узлами с заданным timeout (в миллисекундах). Возвращаемый Array будет иметь 4 элемента. EventType, ENetPacketPeer, который сгенерировал событие, данные, связанные с событием (если есть), канал, связанный с событием (если есть). Если сгенерированное событие — EVENT_RECEIVE, полученный пакет будет поставлен в очередь в связанный ENetPacketPeer.

Регулярно вызывайте эту функцию для обработки подключений, отключений и получения новых пакетов.

Примечание: Этот метод должен вызываться на обоих концах, вовлеченных в событие (отправляющие и принимающие хосты).


void socket_send(destination_address: String, destination_port: int, packet: PackedByteArray) 🔗

Отправляет packet в пункт назначения с адреса и порта, которые в данный момент связаны с этим экземпляром ENetConnection.

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

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