Create a websocket connection running call(Goal, WebSocket)
,
where WebSocket is a socket-pair. Options:
- guarded(+Boolean)
- If
true
(default), guard the execution of Goal
and close the websocket on both normal and abnormal termination of Goal.
If false
, Goal itself is responsible for the
created websocket if Goal succeeds. The websocket is closed
if Goal fails or raises an exception. This can be used to
create a single thread that manages multiple websockets using I/O
multiplexing. See library(http/hub)
.
- subprotocols(+List)
- List of acceptable subprotocols.
- timeout(+TimeOut)
- Timeout to apply to the input stream. Default is
infinite
.
Note that the Request argument is the last for cooperation
with
http_handler/3. A simple echo
server that can be accessed at =/ws/= can be implemented as:
:- use_module(library(http/websocket)).
:- use_module(library(http/thread_httpd)).
:- use_module(library(http/http_dispatch)).
:- http_handler(root(ws),
http_upgrade_to_websocket(echo, []),
[spawn([])]).
echo(WebSocket) :-
ws_receive(WebSocket, Message),
( Message.opcode == close
-> true
; ws_send(WebSocket, Message),
echo(WebSocket)
).
- throws
switching_protocols(Goal, Options)
. The recovery from this
exception causes the HTTP infrastructure to call
call(Goal, WebSocket)
.
- See also
- http_switch_protocol/2.