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-apilibrary 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/wsnamespace, which is statically bound to thewsprefix.
- 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 $messageto 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:base64Binaryandxs:hexBinarywill 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 $messageto all connected clients except to the caller. Invocations of this convenience function are equivalent tows:send($message, ws:ids()[. != ws:id()]). Seews:sendfor more details on the message handling. | 
|---|
| Signature | ws:emit(
  $message  as item()
) as empty-sequence() | 
|---|
| Summary | Emits a $messageto all connected clients. Invocations of this function are equivalent tows:send($message, ws:ids()). Seews:sendfor more details on the message handling. | 
|---|
| Signature | ws:eval(
  $query     as (xs:string|xs:anyURI),
  $bindings  as map((xs:string|xs:QName), item()*)?  := (),
  $options   as map(*)?                              := {}
) as xs:string | 
|---|
| Summary | Schedules the evaluation of the supplied $queryand 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(seexquery:evalfor more details). The following$optionsare 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 jobprefix, 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 | Schedule a second query that will notify the client 10 seconds later that a message was processed.declare
  %ws:message('/tasks', '{$message}')
function local:message($message) {
  ws:eval('prof:sleep(10000), "Your message has been 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 $namefor the WebSocket with the specified$id. If the attribute is unknown, an empty sequence or the optionally specified$defaultvalue 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 $valueto the attribute with the specified$namefor 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 $namefrom 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:connectannotation. 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 Connectstring.
- 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:messageannotation. 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