WebSocket Functions
This module contains functions for accessing specific WebSocket functions. This module is mainly useful in the context of WebSockets.
- The module will be available if the
basex-api
library is found in the classpath. This is the case if you use one of the complete distributions of BaseX (zip, exe, war). - All functions and errors are assigned to the
http://basex.org/modules/ws
namespace, which is statically bound to the ws
prefix. - As sessions are side-effecting operations, all functions are flagged as nondeterministic. As a result, some query optimizations will be suppressed.
Signature | ws:id() as xs:string |
---|
Summary | Returns the ID of the current WebSocket. |
---|
Errors | not-found | No WebSocket with the specified id exists. |
|
---|
Signature | ws:ids() as xs:string* |
---|
Summary | Returns the ids of all currently registered WebSockets. |
---|
Signature | ws:path(
$id as xs:string
) as xs:string |
---|
Summary | Returns the path of the WebSocket with the specified $id . |
---|
Errors | not-found | No WebSocket with the specified id exists. |
|
---|
Signature | ws:close(
$id as xs:string
) as empty-sequence() |
---|
Summary | Closes the connection of the WebSocket with the specified $id . |
---|
Errors | not-found | No WebSocket with the specified id exists. |
|
---|
Signature | ws:send(
$message as item(),
$ids as xs:string*
) as empty-sequence() |
---|
Summary | Sends a $message to the clients with the specified $ids . Ids that cannot be assigned to clients will be ignored. The message will be handled as follows:
- Items of type
xs:base64Binary and xs:hexBinary will be transmitted as binary messages. - Function items (maps, arrays) will be serialized as JSON and transmitted as string messages.
- All other items will be serialized with the default serialization options and transmitted as string messages.
|
---|
Signature | ws:broadcast(
$message as item()
) as empty-sequence() |
---|
Summary | Broadcasts a $message to all connected clients except to the caller. Invocations of this convenience function are equivalent to ws:send($message, ws:ids()[. != ws:id()]) . See ws:send for more details on the message handling. |
---|
Signature | ws:emit(
$message as item()
) as empty-sequence() |
---|
Summary | Emits a $message to all connected clients. Invocations of this function are equivalent to ws:send($message, ws:ids()) . See ws:send for more details on the message handling. |
---|
Signature | ws:eval(
$query as xs:anyAtomicType,
$bindings as map(*)? := (),
$options as map(*)? := {}
) as xs:string |
---|
Summary | Schedules the evaluation of the supplied $query and returns the result to the calling WebSocket client. The query can be a URI or a string, and variables and context items can be declared via $bindings (see xquery:eval for more details). The following $options are available:
option | default | description |
---|
base-uri | – |
The base-uri property for the query. This URI will be used when resolving relative URIs, such as with fn:doc .
| id | – |
A custom job id. The id must not start with the standard job prefix, and it can only be assigned if no job with the same name exists.
|
Scheduling is recommendable if the immediate query execution might be too time consuming and result in a timeout.
|
---|
Errors | |
---|
Examples | declare
%ws:message('/tasks', '{$message}')
function local:message($message) {
ws:eval('prof:sleep(10000), "Your message has been processed."')
}; Schedule a second query that will notify the client 10 seconds later that a message was processed. |
---|
Signature | ws:get(
$id as xs:string,
$name as xs:string,
$default as item()* := ()
) as item()* |
---|
Summary | Returns the value of an attribute with the specified $name for the WebSocket with the specified $id . If the attribute is unknown, an empty sequence or the optionally specified $default value will be returned instead. |
---|
Errors | not-found | No WebSocket with the specified id exists. |
|
---|
Signature | ws:set(
$id as xs:string,
$name as xs:string,
$value as item()*
) as empty-sequence() |
---|
Summary | Assigns the specified $value to the attribute with the specified $name for the WebSocket with the specified $id . |
---|
Errors | not-found | No WebSocket with the specified id exists. |
|
---|
Signature | ws:delete(
$id as xs:string,
$name as xs:string
) as empty-sequence() |
---|
Summary | Deletes an attribute with the specified $name from the WebSocket with the specified $id . |
---|
Errors | not-found | No WebSocket with the specified id exists. |
|
---|
import module namespace ws = "http://basex.org/modules/ws";
declare
%ws:connect('/')
function local:connect() as empty-sequence() {
let $id := ws:id()
let $message := json:serialize({ 'type': 'Connect', 'id': $id })
return ws:broadcast($message)
};
Explanation:
- The function has a
%ws:connect
annotation. It gets called if a client successfully creates a WebSocket connection to the path /
(check out WebSockets for further information). - A JSON response is generated, which contains the new client id and a
Connect
string. - This response will be sent to all other connected clients.
import module namespace ws = "http://basex.org/modules/ws";
declare
%ws:message('/', '{$message}')
function local:message(
$message as xs:string
) as empty-sequence() {
let $message := json:serialize({ 'message': $message })
return ws:emit($message)
};
Explanation:
- The function has a
%ws:message
annotation. It gets called if a client sends a new message. - A JSON response is generated, which contains the message string.
- This response will be sent to all connected clients (including the calling client).
Code | Description |
---|
not-found | No WebSocket with the specified id exists. |
Version 9.2Version 9.1
⚡Generated with XQuery