• Places
    • Home
    • Graphs
    • Prefixes
  • Admin
    • Users
    • Settings
    • Plugins
    • Statistics
  • CPACK
    • Home
    • List packs
    • Submit pack
  • Repository
    • Load local file
    • Load from HTTP
    • Load from library
    • Remove triples
    • Clear repository
  • Query
    • YASGUI SPARQL Editor
    • Simple Form
    • SWISH Prolog shell
  • Help
    • Documentation
    • Tutorial
    • Roadmap
    • HTTP Services
  • Login

/usr/lib/swipl/library/ext/http/http/websocket.pl
All Application Manual Name SummaryHelp

  • http
    • http
      • http_unix_daemon.pl -- Run SWI-Prolog HTTP server as a Unix system daemon
      • thread_httpd.pl -- Threaded HTTP server
      • http_wrapper.pl
      • http_header.pl
      • http_stream.pl -- HTTP Streams
      • http_exception.pl -- Map Prolog exceptions to HTTP errors
      • http_path.pl -- Abstract specification of HTTP server locations
      • http_dispatch.pl -- Dispatch requests in the HTTP server
      • http_host.pl -- Obtain public server location
      • http_parameters.pl -- Extract parameters (GET and POST) from HTTP requests
      • http_client.pl -- HTTP client library
      • http_multipart_plugin.pl -- Multipart form-data plugin
      • http_hook.pl -- HTTP library hooks
      • html_write.pl -- Write HTML text
      • html_quasiquotations.pl -- HTML quasi quotations
      • mimetype.pl -- Determine mime-type for a file
      • html_head.pl -- Automatic inclusion of CSS and scripts links
      • http_server_files.pl -- Serve files needed by modules from the server
      • term_html.pl -- Represent Prolog terms as HTML
      • json.pl -- Reading and writing JSON serialization
      • http_open.pl -- HTTP client library
      • http_session.pl -- HTTP Session management
      • http_openid.pl -- OpenID consumer and server library
      • yadis.pl -- Yadis discovery
      • ax.pl -- Attribute Exchange library
      • http_authenticate.pl -- Authenticate HTTP connections using 401 headers
      • http_json.pl -- HTTP JSON Plugin module
      • http_dirindex.pl -- HTTP directory listings
      • js_write.pl -- Utilities for including JavaScript
      • js_grammar.pl -- JavaScript grammar
      • http_cors.pl -- Enable CORS: Cross-Origin Resource Sharing
      • json_convert.pl -- Convert between JSON terms and Prolog application terms
      • http_server.pl -- HTTP server library
      • http_dyn_workers.pl -- Dynamically schedule HTTP workers.
      • http_server_health.pl -- HTTP Server health statistics
      • hub.pl -- Manage a hub for websockets
      • websocket.pl -- WebSocket support
        • http_open_websocket/3
        • http_upgrade_to_websocket/3
        • ws_send/2
        • ws_receive/2
        • ws_receive/3
        • ws_close/3
        • ws_open/3
        • ws_property/2
        • ws_mask/1
      • http_log.pl -- HTTP Logging module
      • mimepack.pl -- Create a MIME message
 http_upgrade_to_websocket(:Goal, +Options, +Request)
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.
ClioPatria (version V3.1.1-51-ga0b30a5)