:github_url: hide .. DO NOT EDIT THIS FILE!!! .. Generated automatically from Godot engine sources. .. Generator: https://github.com/godotengine/godot/tree/3.6/doc/tools/make_rst.py. .. XML source: https://github.com/godotengine/godot/tree/3.6/modules/websocket/doc_classes/WebSocketServer.xml. .. _class_WebSocketServer: WebSocketServer =============== **Inherits:** :ref:`WebSocketMultiplayerPeer` **<** :ref:`NetworkedMultiplayerPeer` **<** :ref:`PacketPeer` **<** :ref:`Reference` **<** :ref:`Object` A WebSocket server implementation. .. rst-class:: classref-introduction-group Description ----------- This class implements a WebSocket server that can also support the high-level multiplayer API. After starting the server (:ref:`listen`), you will need to :ref:`NetworkedMultiplayerPeer.poll` it at regular intervals (e.g. inside :ref:`Node._process`). When clients connect, disconnect, or send data, you will receive the appropriate signal. \ **Note:** Not available in HTML5 exports. .. rst-class:: classref-reftable-group Properties ---------- .. table:: :widths: auto +-----------------------------------------------+----------------------------------------------------------------------------+---------+ | :ref:`String` | :ref:`bind_ip` | ``"*"`` | +-----------------------------------------------+----------------------------------------------------------------------------+---------+ | :ref:`X509Certificate` | :ref:`ca_chain` | | +-----------------------------------------------+----------------------------------------------------------------------------+---------+ | :ref:`float` | :ref:`handshake_timeout` | ``3.0`` | +-----------------------------------------------+----------------------------------------------------------------------------+---------+ | :ref:`CryptoKey` | :ref:`private_key` | | +-----------------------------------------------+----------------------------------------------------------------------------+---------+ | :ref:`X509Certificate` | :ref:`ssl_certificate` | | +-----------------------------------------------+----------------------------------------------------------------------------+---------+ .. rst-class:: classref-reftable-group Methods ------- .. table:: :widths: auto +---------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`disconnect_peer` **(** :ref:`int` id, :ref:`int` code=1000, :ref:`String` reason="" **)** | +---------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`String` | :ref:`get_peer_address` **(** :ref:`int` id **)** |const| | +---------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`get_peer_port` **(** :ref:`int` id **)** |const| | +---------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`has_peer` **(** :ref:`int` id **)** |const| | +---------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`is_listening` **(** **)** |const| | +---------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Error` | :ref:`listen` **(** :ref:`int` port, :ref:`PoolStringArray` protocols=PoolStringArray( ), :ref:`bool` gd_mp_api=false **)** | +---------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`set_extra_headers` **(** :ref:`PoolStringArray` headers=PoolStringArray( ) **)** | +---------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | void | :ref:`stop` **(** **)** | +---------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Signals ------- .. _class_WebSocketServer_signal_client_close_request: .. rst-class:: classref-signal **client_close_request** **(** :ref:`int` id, :ref:`int` code, :ref:`String` reason **)** Emitted when a client requests a clean close. You should keep polling until you get a :ref:`client_disconnected` signal with the same ``id`` to achieve the clean close. See :ref:`WebSocketPeer.close` for more details. .. rst-class:: classref-item-separator ---- .. _class_WebSocketServer_signal_client_connected: .. rst-class:: classref-signal **client_connected** **(** :ref:`int` id, :ref:`String` protocol **)** Emitted when a new client connects. "protocol" will be the sub-protocol agreed with the client. .. rst-class:: classref-item-separator ---- .. _class_WebSocketServer_signal_client_disconnected: .. rst-class:: classref-signal **client_disconnected** **(** :ref:`int` id, :ref:`bool` was_clean_close **)** Emitted when a client disconnects. ``was_clean_close`` will be ``true`` if the connection was shutdown cleanly. .. rst-class:: classref-item-separator ---- .. _class_WebSocketServer_signal_data_received: .. rst-class:: classref-signal **data_received** **(** :ref:`int` id **)** Emitted when a new message is received. \ **Note:** This signal is *not* emitted when used as high-level multiplayer peer. .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Property Descriptions --------------------- .. _class_WebSocketServer_property_bind_ip: .. rst-class:: classref-property :ref:`String` **bind_ip** = ``"*"`` .. rst-class:: classref-property-setget - void **set_bind_ip** **(** :ref:`String` value **)** - :ref:`String` **get_bind_ip** **(** **)** When not set to ``*`` will restrict incoming connections to the specified IP address. Setting ``bind_ip`` to ``127.0.0.1`` will cause the server to listen only to the local host. .. rst-class:: classref-item-separator ---- .. _class_WebSocketServer_property_ca_chain: .. rst-class:: classref-property :ref:`X509Certificate` **ca_chain** .. rst-class:: classref-property-setget - void **set_ca_chain** **(** :ref:`X509Certificate` value **)** - :ref:`X509Certificate` **get_ca_chain** **(** **)** When using SSL (see :ref:`private_key` and :ref:`ssl_certificate`), you can set this to a valid :ref:`X509Certificate` to be provided as additional CA chain information during the SSL handshake. .. rst-class:: classref-item-separator ---- .. _class_WebSocketServer_property_handshake_timeout: .. rst-class:: classref-property :ref:`float` **handshake_timeout** = ``3.0`` .. rst-class:: classref-property-setget - void **set_handshake_timeout** **(** :ref:`float` value **)** - :ref:`float` **get_handshake_timeout** **(** **)** The time in seconds before a pending client (i.e. a client that has not yet finished the HTTP handshake) is considered stale and forcefully disconnected. .. rst-class:: classref-item-separator ---- .. _class_WebSocketServer_property_private_key: .. rst-class:: classref-property :ref:`CryptoKey` **private_key** .. rst-class:: classref-property-setget - void **set_private_key** **(** :ref:`CryptoKey` value **)** - :ref:`CryptoKey` **get_private_key** **(** **)** When set to a valid :ref:`CryptoKey` (along with :ref:`ssl_certificate`) will cause the server to require SSL instead of regular TCP (i.e. the ``wss://`` protocol). .. rst-class:: classref-item-separator ---- .. _class_WebSocketServer_property_ssl_certificate: .. rst-class:: classref-property :ref:`X509Certificate` **ssl_certificate** .. rst-class:: classref-property-setget - void **set_ssl_certificate** **(** :ref:`X509Certificate` value **)** - :ref:`X509Certificate` **get_ssl_certificate** **(** **)** When set to a valid :ref:`X509Certificate` (along with :ref:`private_key`) will cause the server to require SSL instead of regular TCP (i.e. the ``wss://`` protocol). .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Method Descriptions ------------------- .. _class_WebSocketServer_method_disconnect_peer: .. rst-class:: classref-method void **disconnect_peer** **(** :ref:`int` id, :ref:`int` code=1000, :ref:`String` reason="" **)** Disconnects the peer identified by ``id`` from the server. See :ref:`WebSocketPeer.close` for more information. .. rst-class:: classref-item-separator ---- .. _class_WebSocketServer_method_get_peer_address: .. rst-class:: classref-method :ref:`String` **get_peer_address** **(** :ref:`int` id **)** |const| Returns the IP address of the given peer. .. rst-class:: classref-item-separator ---- .. _class_WebSocketServer_method_get_peer_port: .. rst-class:: classref-method :ref:`int` **get_peer_port** **(** :ref:`int` id **)** |const| Returns the remote port of the given peer. .. rst-class:: classref-item-separator ---- .. _class_WebSocketServer_method_has_peer: .. rst-class:: classref-method :ref:`bool` **has_peer** **(** :ref:`int` id **)** |const| Returns ``true`` if a peer with the given ID is connected. .. rst-class:: classref-item-separator ---- .. _class_WebSocketServer_method_is_listening: .. rst-class:: classref-method :ref:`bool` **is_listening** **(** **)** |const| Returns ``true`` if the server is actively listening on a port. .. rst-class:: classref-item-separator ---- .. _class_WebSocketServer_method_listen: .. rst-class:: classref-method :ref:`Error` **listen** **(** :ref:`int` port, :ref:`PoolStringArray` protocols=PoolStringArray( ), :ref:`bool` gd_mp_api=false **)** Starts listening on the given port. You can specify the desired subprotocols via the "protocols" array. If the list empty (default), no sub-protocol will be requested. If ``true`` is passed as ``gd_mp_api``, the server will behave like a network peer for the :ref:`MultiplayerAPI`, connections from non-Godot clients will not work, and :ref:`data_received` will not be emitted. If ``false`` is passed instead (default), you must call :ref:`PacketPeer` functions (``put_packet``, ``get_packet``, etc.), on the :ref:`WebSocketPeer` returned via ``get_peer(id)`` to communicate with the peer with given ``id`` (e.g. ``get_peer(id).get_available_packet_count``). .. rst-class:: classref-item-separator ---- .. _class_WebSocketServer_method_set_extra_headers: .. rst-class:: classref-method void **set_extra_headers** **(** :ref:`PoolStringArray` headers=PoolStringArray( ) **)** Sets additional headers to be sent to clients during the HTTP handshake. .. rst-class:: classref-item-separator ---- .. _class_WebSocketServer_method_stop: .. rst-class:: classref-method void **stop** **(** **)** Stops the server and clear its state. .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)` .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)` .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)` .. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`