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.