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 и порт не могут быть известны заранее.