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...
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("WebSocket closed with code: %d, reason %s. Clean: %s" % [code, reason, code != -1])
set_process(false) # Stop processing.
Щоб використовувати вузол як частину сервера 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 для списку дійсних кодів стану). Якщо code від’ємне, з’єднання буде негайно закрито без повідомлення віддаленого вузла.
reason – це причина закриття з’єднання, яку може прочитати людина. Це може бути будь-який рядок UTF-8, менший за 123 байти.
Примітка: Щоб досягти чистого закриття, потрібно продовжувати опитування, доки не буде досягнуто 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.