Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
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) |
connect_to_host(address: String, port: int, channels: int = 0, data: int = 0) |
|
create_host(max_peers: int = 32, max_channels: int = 0, in_bandwidth: int = 0, out_bandwidth: int = 0) |
|
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() |
dtls_client_setup(hostname: String, client_options: TLSOptions = null) |
|
dtls_server_setup(server_options: TLSOptions) |
|
void |
flush() |
get_local_port() const |
|
get_max_channels() const |
|
pop_statistic(statistic: HostStatistic) |
|
void |
refuse_new_connections(refuse: bool) |
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_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 и порт не могут быть известны заранее.