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() та онлайн-посібника.
Властивості
|
||
|
||
|
||
|
||
|
||
|
Методи
accept_stream(stream: StreamPeer) |
|
void |
|
connect_to_url(url: String, tls_client_options: TLSOptions = null) |
|
get_close_code() const |
|
get_close_reason() const |
|
get_connected_host() const |
|
get_connected_port() const |
|
get_ready_state() const |
|
get_requested_url() const |
|
get_selected_protocol() const |
|
void |
poll() |
send(message: PackedByteArray, write_mode: WriteMode = 1) |
|
void |
set_no_delay(enabled: 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() 🔗
void set_handshake_headers(value: PackedStringArray)
PackedStringArray get_handshake_headers()
Додаткові заголовки 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 🔗
Інтервал (у секундах), через який одноранговий вузол автоматично надсилатиме контрольні кадри WebSocket "ping". Якщо встановлено значення 0, контрольні кадри "ping" не надсилатимуться.
Примітка: не впливає на веб-експорт через обмеження браузера.
int inbound_buffer_size = 65535 🔗
Розмір вхідного буфера в байтах (хоча максимальна кількість пам'яті, яка буде виділена для вхідних пакетів).
int max_queued_packets = 4096 🔗
Максимальна кількість пакетів, які будуть допущені в черзі (внутрішній і вихідний).
int outbound_buffer_size = 65535 🔗
Розмір вхідного буфера в байтах (хоча максимальна кількість пам'яті, яка буде виділена для вихідних пакетів).
PackedStringArray supported_protocols = PackedStringArray() 🔗
void set_supported_protocols(value: PackedStringArray)
PackedStringArray get_supported_protocols()
Під-протоколи 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.
Повернення отриманого 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.