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.