Page
Library
Module
Module type
Parameter
Class
Class type
Source
%%VERSION%%
resp-server is an OCaml library for building servers that communicate using the Redis serialization protocol.
resp-server is distributed under the ISC license.
Homepage: https://github.com/zshipko/resp-server
resp-server can be installed with opam:
opam install resp-serverIf you don't use opam consult the opam file for build instructions.
Documentation is available online.
To generate documentation locally run odig odoc resp-server - then to view run odig doc in the root of the project.
See src/resp_server.mli for the commented interface description.
To create a new server using resp-server you need to define a few modules.
As an example we can create a simple counter server that has keys with integer values that can be incremented and decremented:
BACKEND - defines the request context and client typesmodule Backend = struct
    (** This is the global request context type *)
    type t = (string, int) Hashtbl.t
    (** The client type is the per-client request context type *)
    type client = unit
    let new_client _ctx = ()
endAUTH - defines authentication typesmodule Auth = struct
    type t = string
    let check t cmd =
        Array.length cmd > 0 && cmd.(0) = t
endMake to create the new servermodule Server = Make(Auth)(Backend)let modify_value db args f =
    match args with
    | [| String key |] ->
        (match Hashtbl.find_opt srv key with
        | Some i -> Hashtbl.replace srv key (f i)
        | None -> Hashtbl.replace srv key (f 0)
        end;
        Server.ok)
    | _ -> Server.error "Invalid arguments"
let _incr db _cli _cmd args =
    modify_value db args (fun a -> a + 1)
let _decr db _cli _cmd args =
    modify_value db args (fun a -> a - 1)
let commands = [
    "incr", _incr;
    "decr", _decr;
]let main =
    let db = Hashtbl.create 16 in
    let auth = "password" in
    let srv = Server.create ~auth ~commands (`TCP (`Port 1234)) db in
    Server.run srv
let () = Lwt_main.run mainIn the distribution sample programs and tests are located in the test directory. They can be built and run with:
jbuilder runtest