resp-server is an OCaml library for building servers that communicate using the Redis serialization protocol.
resp-server is distributed under the ISC license.
resp-server can be installed with
opam install resp-server
If 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.
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 types
module 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 = () end
AUTH- defines authentication types
module Auth = struct type t = string let check t cmd = Array.length cmd > 0 && cmd.(0) = t end
Maketo create the new server
module Server = Make(Auth)(Backend)
Define some commands
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; ]
Create and run the server
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 main
In the distribution sample programs and tests are located in the
test directory. They can be built and run with:
>= "1.0" & < "2.0.0"