WebSocketPeer

Успадковує: PacketPeer < RefCounted < Object

Підключення WebSocket.

Опис

Цей клас представляє з'єднання WebSocket і може використовуватися як клієнт WebSocket (сумісний з RFC 6455) або як віддалений вузол сервера WebSocket.

Ви можете надсилати бінарні кадри WebSocket за допомогою методу PacketPeer.put_packet, а текстові кадри WebSocket за допомогою методу send (надавати перевагу текстовим кадрам під час взаємодії з текстовим API). Ви можете перевірити тип кадру останнього пакета за допомогою методу was_string_packet().

Щоб запустити клієнт WebSocket, спочатку викличте метод connect_to_url(). потім регулярно викликати poll() (наприклад, під час процесу Node). Ви можете запитати стан сокета за допомогою get_ready_state(), отримати кількість пакетів, що очікують обробки, використовуючи PacketPeer.get_available_packet_count(), та отримати їх через PacketPeer.get_packet().

extends Node

var socket = WebSocketPeer.new()

func _ready():
    socket.connect_to_url("wss://example.com")

func _process(delta):
    socket.poll()
    var state = socket.get_ready_state()
    if state == WebSocketPeer.STATE_OPEN:
        while socket.get_available_packet_count():
            print("Packet: ", socket.get_packet())
    elif state == WebSocketPeer.STATE_CLOSING:
        # Keep polling to achieve proper close.
        pass
    elif state == WebSocketPeer.STATE_CLOSED:
        var code = socket.get_close_code()
        var reason = socket.get_close_reason()
        print("Вебсокет закрито з кодом: %d, причина %s. Очищено: %s % [code, reason, code != -1])
        set_process(false) # Зупиняє обробку.

Щоб використовувати вузол як частину сервера WebSocket, зверніться до accept_stream() та онлайн-посібника.

Властивості

PackedStringArray

handshake_headers

PackedStringArray()

float

heartbeat_interval

0.0

int

inbound_buffer_size

65535

int

max_queued_packets

4096

int

outbound_buffer_size

65535

PackedStringArray

supported_protocols

PackedStringArray()

Методи

Error

accept_stream(stream: StreamPeer)

void

close(code: int = 1000, reason: String = "")

Error

connect_to_url(url: String, tls_client_options: TLSOptions = null)

int

get_close_code() const

String

get_close_reason() const

String

get_connected_host() const

int

get_connected_port() const

int

get_current_outbound_buffered_amount() const

State

get_ready_state() const

String

get_requested_url() const

String

get_selected_protocol() const

void

poll()

Error

send(message: PackedByteArray, write_mode: WriteMode = 1)

Error

send_text(message: String)

void

set_no_delay(enabled: bool)

bool

was_string_packet() const


Переліки

enum WriteMode: 🔗

WriteMode WRITE_MODE_TEXT = 0

Вкажіть, що повідомлення WebSockets повинні передаватися як текстове навантаження (тільки допустимо UTF-8).

WriteMode WRITE_MODE_BINARY = 1

Визначає, що повідомлення WebSockets повинні бути передані як бінарне навантаження (в будь-якому комбінації байтів дозволено).


enum State: 🔗

State STATE_CONNECTING = 0

Створено гніздо. З'єднання ще не відкривається.

State STATE_OPEN = 1

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

State STATE_CLOSING = 2

З'єднання знаходиться в процесі закривання. Це означає, що близький запит було відправлено на пульт дистанційного керування, але підтвердження не було отримано.

State STATE_CLOSED = 3

З'єднання закрито або не вдалося відкрити.


Описи властивостей

PackedStringArray handshake_headers = PackedStringArray() 🔗

Додаткові заголовки HTTP, які будуть відправлені під час роботи WebSocket.

Примітка: Не підтримується в Інтернет-експорту через обмеження браузера.

Note: The returned array is copied and any changes to it will not update the original property value. See PackedStringArray for more details.


float heartbeat_interval = 0.0 🔗

  • void set_heartbeat_interval(value: float)

  • float get_heartbeat_interval()

Інтервал (у секундах), через який одноранговий вузол автоматично надсилатиме контрольні кадри WebSocket "ping". Якщо встановлено значення 0, контрольні кадри "ping" не надсилатимуться.

Примітка: не впливає на веб-експорт через обмеження браузера.


int inbound_buffer_size = 65535 🔗

  • void set_inbound_buffer_size(value: int)

  • int get_inbound_buffer_size()

Розмір вхідного буфера в байтах (хоча максимальна кількість пам'яті, яка буде виділена для вхідних пакетів).


int max_queued_packets = 4096 🔗

  • void set_max_queued_packets(value: int)

  • int get_max_queued_packets()

Максимальна кількість пакетів, які будуть допущені в черзі (внутрішній і вихідний).


int outbound_buffer_size = 65535 🔗

  • void set_outbound_buffer_size(value: int)

  • int get_outbound_buffer_size()

Розмір вхідного буфера в байтах (хоча максимальна кількість пам'яті, яка буде виділена для вихідних пакетів).


PackedStringArray supported_protocols = PackedStringArray() 🔗

Під-протоколи WebSocket допускаються під час роботи з WebSocket.

Note: The returned array is copied and any changes to it will not update the original property value. See PackedStringArray for more details.


Описи методів

Error accept_stream(stream: StreamPeer) 🔗

Приймає з'єднання, що виконує HTTP-підказку як сервер WebSocket. stream повинен бути дійсним TCP потік, отриманий через TCPServer.take_connection(), або потік TLS, прийнятий через StreamPeerTLS.accept_stream().

Note: Не підтримується в Інтернет-експортах з урахуванням обмежень браузера.


void close(code: int = 1000, reason: String = "") 🔗

Закриває це з’єднання WebSocket. code – це код стану закриття (див. RFC 6455, розділ 7.4, для отримання списку дійсних кодів стану). reason – це причина закриття з’єднання, яку можна прочитати людині (може бути будь-яким рядком UTF-8, меншим за 123 байти). Якщо code від’ємне значення, з’єднання буде негайно закрито без повідомлення віддаленого вузла.

Примітка: Щоб досягти чистого закриття, потрібно продовжувати опитування, доки не буде досягнуто STATE_CLOSED.

Примітка: Веб-експорт може не підтримувати всі коди стану. Будь ласка, зверніться до документації до конкретного браузера для отримання додаткової інформації.


Error connect_to_url(url: String, tls_client_options: TLSOptions = null) 🔗

Підключається до вказаної URL-адреси. Сертифікати TLS перевірятимуться на ім’я хоста під час підключення за допомогою протоколу wss://. Ви можете передати додатковий параметр tls_client_options, щоб налаштувати довірені центри сертифікації, або вимкнути перевірку загального імені. Перегляньте TLSOptions.client() і TLSOptions.client_unsafe().

**Примітка: ** Цей метод не блокує і поверне @GlobalScope.OK перед встановленням з’єднання, доки надані параметри дійсні, а вузол не перебуває в недійсному стані (наприклад, уже підключений). Регулярно викликайте poll() (наприклад, під час процесу Node) і перевіряйте результат get_ready_state(), щоб знати, успішне чи невдале підключення.

Примітка: Щоб уникнути попереджень про змішаний вміст або помилок у Інтернеті, можливо, вам доведеться використовувати url, який починається з wss:// (безпечно) замість ws://. При цьому переконайтеся, що використовуєте повне доменне ім’я, яке відповідає визначеному в сертифікаті TLS сервера. Не підключайтеся безпосередньо через IP-адресу для з’єднань wss://, оскільки вона не збігатиметься з сертифікатом TLS.


int get_close_code() const 🔗

Повернення отриманого WebSocket закритого коду кадру, або -1, коли підключення не було чисто закрито. Тільки зателефонуйте цей метод, коли get_ready_state() повертає STATE_CLOSED.


String get_close_reason() const 🔗

Повертає отриманий WebSocket близький рядок стану кадру. Тільки зателефонуйте цей метод, коли get_ready_state() повертає STATE_CLOSED.


String get_connected_host() const 🔗

Повертає IP-адресу підключеного однолітка.

Примітка: Не доступний в Інтернет-експорті.


int get_connected_port() const 🔗

Повертає віддалений порт підключених однолітків.

Примітка: Не доступний в Інтернет-експорті.


int get_current_outbound_buffered_amount() const 🔗

Повертаємо поточну кількість даних у виїзному буфері websocket. Примітка: Інтернет-експорти використовують WebSocket.bufferedAmount, в той час як інші платформи використовують внутрішній буфер.


State get_ready_state() const 🔗

Повертає стан готовності з'єднання.


String get_requested_url() const 🔗

Повернути URL-адресу, запитаний цим аналогом. URL виводиться з url до connect_to_url() або з заголовків HTTP при дії сервера (тобто при використанні accept_stream()).


String get_selected_protocol() const 🔗

Повертає вибраний WebSocket sub-protocol для цього з'єднання або порожній рядок, якщо суб-protocol ще не було вибрано.


void poll() 🔗

Оновлює стан з'єднання і отримує вхідні пакети. Зателефонуйте цю функцію, щоб зберегти її в чистому стані.


Error send(message: PackedByteArray, write_mode: WriteMode = 1) 🔗

Надіслане повідомлення message за допомогою бажаного Write_mode. При надсиланні String, волійте використання send_text().


Error send_text(message: String) 🔗

Надсилає задане повідомлення message, використовуючи текстовий режим WebSocket. Надайте перевагу цьому методу над PacketPeer.put_packet() під час взаємодії зі стороннім текстовим API (наприклад, під час використання повідомлень у форматі JSON).


void set_no_delay(enabled: bool) 🔗

Вимкнено алгоритм Nagle на підставі розетки TCP (default). Див. StreamPeerTCP.set_no_delay() для отримання додаткової інформації.

Примітка: Не доступний в Web-експорті.


bool was_string_packet() const 🔗

Повертаємо true, якщо останній отриманий пакет був відправлений як текстове навантаження. Див. WriteMode.