WebSocketPeer

Hereda: PacketPeer < RefCounted < Object

Una conexión WebSocket.

Descripción

Esta clase representa una conexión WebSocket, y puede ser usada como un cliente WebSocket (compatible con RFC 6455) o como un par remoto de un servidor WebSocket.

Puedes enviar tramas binarias de WebSocket usando PacketPeer.put_packet(), y tramas de texto de WebSocket usando send() (prefiere tramas de texto cuando interactúes con una API basada en texto). Puedes verificar el tipo de trama del último paquete a través de was_string_packet().

Para iniciar un cliente WebSocket, primero llama a connect_to_url(), luego llama regularmente a poll() (p. ej. durante el proceso de Node). Puedes consultar el estado del socket a través de get_ready_state(), obtener el número de paquetes pendientes usando PacketPeer.get_available_packet_count(), y recuperarlos a través de PacketPeer.get_packet().

extends Node

var socket = WebSocketPeer.new()

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

func _process(delta):
    socket.poll()
    var state = socket.get_ready_state()
    if state == WebSocketPeer.STATE_OPEN:
        while socket.get_available_packet_count():
            print("Paquete: ", 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 cerrado con código: %d, razón %s. Limpiado: %s" % [code, reason, code != -1])
        set_process(false) # Detener el procesamiento.

Para usar el par como parte de un servidor WebSocket, consulta accept_stream() y el tutorial en línea.

Propiedades

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()

Métodos

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


Enumeraciones

enum WriteMode: 🔗

WriteMode WRITE_MODE_TEXT = 0

Especifica que los mensajes de WebSockets deben ser transferidos como carga de texto (sólo se permite el UTF-8 válido).

WriteMode WRITE_MODE_BINARY = 1

Especifica que los mensajes de WebSockets deben ser transferidos como carga binaria (se permite cualquier combinación de bytes).


enum State: 🔗

State STATE_CONNECTING = 0

El socket ha sido creado. La conexión aún no está abierta.

State STATE_OPEN = 1

La conexión está abierta y lista para comunicarse.

State STATE_CLOSING = 2

La conexión está en proceso de cierre. Esto significa que se ha enviado una solicitud de cierre al par remoto, pero no se ha recibido la confirmación.

State STATE_CLOSED = 3

La conexión está cerrada o no se pudo abrir.


Descripciones de Propiedades

PackedStringArray handshake_headers = PackedStringArray() 🔗

Las cabeceras HTTP adicionales que se enviarán durante el establecimiento de comunicación de WebSocket.

Nota: No soportado en las exportaciones Web debido a las restricciones de los navegadores.

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()

El intervalo (en segundos) en el que el par enviará automáticamente tramas de control "ping" de WebSocket. Cuando se establece en 0, no se enviarán tramas de control "ping".

Nota: No tiene efecto en las exportaciones Web debido a las restricciones del navegador.


int inbound_buffer_size = 65535 🔗

  • void set_inbound_buffer_size(value: int)

  • int get_inbound_buffer_size()

El tamaño del búfer de entrada en bytes (aproximadamente la cantidad máxima de memoria que se asignará para los paquetes entrantes).


int max_queued_packets = 4096 🔗

  • void set_max_queued_packets(value: int)

  • int get_max_queued_packets()

La cantidad máxima de paquetes que se permitirán en las colas (tanto de entrada como de salida).


int outbound_buffer_size = 65535 🔗

  • void set_outbound_buffer_size(value: int)

  • int get_outbound_buffer_size()

El tamaño del búfer de entrada en bytes (aproximadamente la cantidad máxima de memoria que se asignará para los paquetes salientes).


PackedStringArray supported_protocols = PackedStringArray() 🔗

Los subprotocolos de WebSocket permitidos durante el establecimiento de comunicación de WebSocket.

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


Descripciones de Métodos

Error accept_stream(stream: StreamPeer) 🔗

Acepta una conexión de par que realiza el establecimiento de comunicación HTTP como un servidor WebSocket. El stream debe ser un flujo TCP válido recuperado a través de TCPServer.take_connection(), o un flujo TLS aceptado a través de StreamPeerTLS.accept_stream().

Nota: No compatible con las exportaciones Web debido a las restricciones de los navegadores.


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

Cierra esta conexión WebSocket. code es el código de estado para el cierre (ver la sección 7.4 del RFC 6455 para obtener una lista de códigos de estado válidos). reason es la razón legible por humanos para cerrar la conexión (puede ser cualquier cadena UTF-8 que tenga menos de 123 bytes). Si code es negativo, la conexión se cerrará inmediatamente sin notificar al par remoto.

Nota: Para lograr un cierre limpio, deberá seguir sonedeando hasta que se alcance STATE_CLOSED.

Nota: Es posible que la exportación Web no admita todos los códigos de estado. Consulta la documentación específica del navegador para obtener más detalles.


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

Conecta a la URL dada. Los certificados TLS se verificarán con el nombre de host al conectarse mediante el protocolo wss://. Puedes pasar el parámetro opcional tls_client_options para personalizar las autoridades de certificación de confianza, o desactivar la verificación del nombre común. Véase TLSOptions.client() y TLSOptions.client_unsafe().

Nota: Este método no es bloqueante, y devolverá @GlobalScope.OK antes de que se establezca la conexión, siempre y cuando los parámetros proporcionados sean válidos y el par no esté en un estado inválido (por ejemplo, ya conectado). Llama regularmente a poll() (por ejemplo, durante el proceso de Node) y comprueba el resultado de get_ready_state() para saber si la conexión tiene éxito o falla.

Nota: Para evitar avisos o errores de contenido mixto en la Web, es posible que tengas que utilizar una url que comience con wss:// (seguro) en lugar de ws://. Al hacerlo, asegúrate de utilizar el nombre de dominio completo que coincida con el definido en el certificado TLS del servidor. No te conectes directamente a través de la dirección IP para las conexiones wss://, ya que no coincidirá con el certificado TLS.


int get_close_code() const 🔗

Devuelve el código de estado del frame de cierre de WebSocket recibido, o -1 cuando la conexión no se cerró limpiamente. Solo llama a este método cuando get_ready_state() devuelve STATE_CLOSED.


String get_close_reason() const 🔗

Devuelve la cadena de motivo del estado del frame de cierre de WebSocket recibido. Solo llama a este método cuando get_ready_state() devuelve STATE_CLOSED.


String get_connected_host() const 🔗

Devuelve la dirección IP del par conectado.

Nota: No disponible en la exportación Web.


int get_connected_port() const 🔗

Devuelve el puerto remoto del par conectado.

Nota: No disponible en la exportación Web.


int get_current_outbound_buffered_amount() const 🔗

Devuelve la cantidad actual de datos en el búfer de websocket de salida. Nota: Las exportaciones Web usan WebSocket.bufferedAmount, mientras que otras plataformas usan un búfer interno.


State get_ready_state() const 🔗

Devuelve el estado de preparación de la conexión.


String get_requested_url() const 🔗

Devuelve la URL solicitada por este par. La URL se deriva de la url pasada a connect_to_url() o de las cabeceras HTTP cuando se actúa como servidor (es decir, cuando se utiliza accept_stream()).


String get_selected_protocol() const 🔗

Devuelve el subprotocolo WebSocket seleccionado para esta conexión o una cadena vacía si el subprotocolo aún no se ha seleccionado.


void poll() 🔗

Actualiza el estado de la conexión y recibe los paquetes entrantes. Llama a esta función regularmente para mantenerla en un estado limpio.


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

Envía el message dado utilizando el write_mode deseado. Cuando se envía una String, es preferible utilizar send_text().


Error send_text(message: String) 🔗

Envía el message dado utilizando el modo de texto WebSocket. Es preferible este método a PacketPeer.put_packet() cuando se interactúa con una API de terceros basada en texto (por ejemplo, cuando se utilizan mensajes con formato JSON).


void set_no_delay(enabled: bool) 🔗

Desactiva el algoritmo de Nagle en el socket TCP subyacente (por defecto). Véase StreamPeerTCP.set_no_delay() para obtener más información.

Nota: No disponible en la exportación Web.


bool was_string_packet() const 🔗

Devuelve true si el último paquete recibido fue enviado como una carga de texto. Véase WriteMode.