Availability:
:- use_module(library(http/websocket)).
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. Iffalse
, Goal itself is responsible for the created websocket. This can be used to create a single thread that manages multiple websockets using I/O multiplexing. - 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 callcall(Goal, WebSocket)
.- See also
- http_switch_protocol/2.