Cohttp_server_lwt_unixHigh performance lwt server
This module is an alternative to the server offered in Cohttp_lwt_unix.Server. It's a simplified implementation that has less functionality but offers more control and better performance. The differences are as follows:
An example server:
open Lwt.Syntax
let server_callback ctx =
Lwt.join
[
Cohttp_server_lwt_unix.ontext.discard_body ctx;
Cohttp_server_lwt_unix.ontext.respond ctx (Http.Response.make ())
(Cohttp_server_lwt_unix.Body.string "hello world");
]
let main () =
let* _server =
let listen_address = Unix.(ADDR_INET (inet_addr_loopback, 8080)) in
let server = Cohttp_server_lwt_unix.create server_callback in
Lwt_io.establish_server_with_client_address ~backlog:10_000
listen_address (fun _addr ch ->
Cohttp_server_lwt_unix.handle_connection server ch)
in
let forever, _ = Lwt.wait () in
forever
let () = ignore (Lwt_main.run (main ()))module Body : sig ... endmodule Context : sig ... endcreate ?on_exn f creates an HTTP server that will handle every incoming request with f concurrently.
on_exn will be called on exceptions not caught in f or raised by the server itself. If on_exn isn't provided Lwt.async_exception_hook will be used.
val handle_connection :
t ->
(Lwt_io.input_channel * Lwt_io.output_channel) ->
unit Lwt.thandle_connection t (i, o) will handle all HTTP requests incoming from i and write them to o.
This function should be used with Lwt_io.establish_server_with_client_address to setup a running HTTP server.