1 Dispatching Server
The Web Server is just a configuration of a dispatching server.
1.1 Dispatching Server Signatures
signature
dispatch-server^ : signature
The dispatch-server^ signature is an alias for web-server^.
Runs the server—the confirmation channel will be send an exception if one occurs starting the server or the port number if there is none— and returns a procedure that shuts down the server.
procedure
(serve-ports ip op) → void
ip : input-port? op : output-port? Serves a single connection represented by the ports ip and op.
signature
dispatch-server-connect^ : signature
The dispatch-server-connect^ signature abstracts the conversion of connection ports (e.g., to implement SSL) as used by the dispatch server.
procedure
(port->real-ports ip op) →
input-port? output-port? ip : input-port? op : output-port? Converts connection ports as necessary.The connection ports are normally TCP ports, but an alternate implementation of tcp^ linked to the dispatcher can supply different kinds of ports.
signature
dispatch-server-config^ : signature
value
Specifies the port to serve on.Passed to tcp-listen.Passed to tcp-listen.Specifies the initial timeout given to a connection.
procedure
(read-request c p port-addresses) →
any/c boolean? c : connection? p : listen-port-number? port-addresses : (input-port? . -> . (values string? string?)) Defines the way the server reads requests off connections to be passed to dispatch.
value
dispatch : (-> connection? any/c void)
How to handle requests.
1.2 Dispatching Server Unit
value
:
(unit/c (import tcp^ dispatch-server-connect^ dispatch-server-config^) (export dispatch-server^))
Added in version 1.1 of package web-server-lib.
1.3 Threads and Custodians
The dispatching server runs in a dedicated thread. Every time a connection is initiated, a new thread is started to handle it. Connection threads are created inside a dedicated custodian that is a child of the server’s custodian. When the server is used to provide servlets, each servlet also receives a new custodian that is a child of the server’s custodian not the connection custodian.