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

  • http
    • http
      • http_unix_daemon.pl
      • thread_httpd.pl -- Threaded HTTP server
        • schedule_workers/1
        • http_server/2
        • http_current_server/2
        • http_server_property/2
        • http_workers/2
        • http_add_worker/2
        • http_current_worker/2
        • http_stop_server/2
        • http_enough_workers/3
        • message_level/2
        • http_requeue/1
        • http_close_connection/1
        • http_spawn/2
      • http_wrapper.pl
      • http_header.pl
      • http_stream.pl -- HTTP Streams
      • http_exception.pl
      • http_path.pl -- Abstract specification of HTTP server locations
      • http_dispatch.pl
      • http_host.pl
      • http_json.pl -- HTTP JSON Plugin module
      • http_client.pl -- HTTP client library
      • json.pl -- Reading and writing JSON serialization
      • http_open.pl
      • http_parameters.pl -- Extract parameters (GET and POST) from HTTP requests
      • http_multipart_plugin.pl
      • http_hook.pl -- HTTP library hooks
      • html_write.pl -- Write HTML text
      • html_quasiquotations.pl
      • html_decl.pl
      • js_write.pl
      • js_grammar.pl
      • http_server_files.pl -- Serve files needed by modules from the server
      • hub.pl -- Manage a hub for websockets
      • websocket.pl
      • http_session.pl
      • http_cors.pl -- Enable CORS: Cross-Origin Resource Sharing
      • mimetype.pl
      • html_head.pl
      • term_html.pl -- Represent Prolog terms as HTML
      • http_dyn_workers.pl
 http_server(:Goal, :Options) is det
Create a server at Port that calls Goal for each parsed request. Options provide a list of options. Defined options are
port(?Address)
Port to bind to. Address is either a port or a term Host:Port. The port may be a variable, causing the system to select a free port. See tcp_bind/2.
unix_socket(+Path)
Instead of binding to a TCP port, bind to a Unix Domain Socket at Path.
entry_page(+URI)
Affects the message printed while the server is started. Interpreted as a URI relative to the server root.
tcp_socket(+Socket)
If provided, use this socket instead of the creating one and binding it to an address. The socket must be bound to an address. Note that this also allows binding an HTTP server to a Unix domain socket (AF_UNIX). See socket_create/2.
workers(+Count)
Determine the number of worker threads. Default is 5. This is fine for small scale usage. Public servers typically need a higher number.
timeout(+Seconds)
Maximum time of inactivity trying to read the request after a connection has been opened. Default is 60 seconds. See set_stream/1 using the timeout option.
keep_alive_timeout(+Seconds)
Time to keep `Keep alive' connections alive. Default is 2 seconds.
stack_limit(+Bytes)
Stack limit to use for the workers. The default is inherited from the main thread. If you need to control resource usage you may consider the spawn option of http_handler/3 and library(thread_pool).
silent(Bool)
If true (default false), do not print an informational message that the server was started.

A typical initialization for an HTTP server that uses http_dispatch/1 to relay requests to predicates is:

:- use_module(library(http/thread_httpd)).
:- use_module(library(http/http_dispatch)).

start_server(Port) :-
    http_server(http_dispatch, [port(Port)]).

Note that multiple servers can coexist in the same Prolog process. A notable application of this is to have both an HTTP and HTTPS server, where the HTTP server redirects to the HTTPS server for handling sensitive requests.