Http_async.Server
type error_handler =
?exn:Core.Exn.t ->
?request:Request.t ->
Status.t ->
(Response.t * Body.Writer.t) Async.Deferred.t
val run_server_loop :
?error_handler:error_handler ->
( (Request.t * Body.Reader.t) ->
(Response.t * Body.Writer.t) Async.Deferred.t ) ->
Shuttle.Input_channel.t ->
Shuttle.Output_channel.t ->
unit Async.Deferred.t
run_server_loop
accepts a HTTP service, and returns a callback that can be used to drive the server loop created via Shuttle.Connection.listen
. This allows the user to customize the Input_channel
and Output_channel
and have control over the various Server configuration options like accept_n
, backlog
and more.
val run :
?max_connections:int ->
?max_accepts_per_batch:int ->
?backlog:int ->
?socket:
( [ `Unconnected ], [< Async.Socket.Address.t ] as 'a ) Async.Socket.t ->
?buffer_config:Buffer_config.t ->
?error_handler:( 'a -> error_handler ) ->
where_to_listen:( 'a, 'b ) Async.Tcp.Where_to_listen.t ->
( 'a ->
(Request.t * Body.Reader.t) ->
(Response.t * Body.Writer.t) Async.Deferred.t ) ->
( 'a, 'b ) Async.Tcp.Server.t Async.Deferred.t
run
sets up a Tcp.Server.t
and drives the HTTP server loop with the user provided request-handler.
val run_command :
?interrupt:unit Async.Deferred.t ->
?readme:( unit -> string ) ->
?error_handler:( Async.Socket.Address.Inet.t -> error_handler ) ->
summary:string ->
( Async.Socket.Address.Inet.t ->
(Request.t * Body.Reader.t) ->
(Response.t * Body.Writer.t) Async.Deferred.t ) ->
Async.Command.t
run_command
is similar to run
but instead returns an Async.Command.t
that can be used to start the async event loop from a program's entrypoint. If interrupt
is provided, the server will be stopped when interrupt
is fulfilled.