Websockets
Websocket support was present prior to Pedestal 0.7, but was a container-specific option for Jetty. In Pedestal 0.7, websocket support was refactored to be more universal and declarative, part of the service map. |
Websockets are an asynchronous and bidirectional connection between a client and a server. Once a Websocket connection is established, either party may send messages to the other party - this unleashes truly unbounded possibilities for creating dynamic, real-time, and asynchronous applications.
Websocket requests are not routed the way HTTP requests are; instead, the mapping from incoming requests to Websocket handlers is defined in the service map.
In the service map, the :io.pedestal.http/websockets key maps string routes to endpoint maps.
The endpoint map is a set of callbacks and configuration. The path and endpoint map are ultimately passed to the add-endpoint
function, which describes
in detail how the callbacks are used.
Key | Signature | Description |
---|---|---|
:on-open |
(Session, EndpointConfig) → Object |
Invoked when the client first opens a connection. The returned value is retained and passed as the first argument of the remaining callbacks. |
:on-close |
(Object, Session, CloseReason) → nil |
Invoked when the socket is closed, allowing any resources to be freed. |
:on-error |
(Object, Session, Throwable) → nil |
Passed any unexpected exception. |
:on-text |
(Object, String) → nil |
Passed a text message from the client, as a single String. |
:on-binary |
(Object, ByteBuffer) → nil |
Passed a binary message, as a single ByteBuffer. |
:configure |
(ServerEndpointConfig$Builder) → nil |
Allows additional configuration using an instance of |
Key | Type | Description |
---|---|---|
:subprotocols |
vector of String |
Optional, specifies sub-protocols for the websocket connection |
:idle-timeout-ms |
long |
Sets the max idle timeout for the websocket to a fixed value. |
Essentially, the :on-open callback is invoked when the client initiates the connection.
It is intended that, when the client connects, some form of server-side process will be initiated
capable of sending messages to the client asynchronously.
It is the responsibility of the :on-open callback to create such a process.
One common option is to use the on-open-start-ws-connection
function to create the callback, or
construct the :on-open callback around the start-ws-connection
function.
The :on-text and :on-binary callbacks are invoked when a text or binary message from the client is received.