|
3 年前 | |
---|---|---|
include | 3 年前 | |
priv | 3 年前 | |
src | 3 年前 | |
.gitignore | 3 年前 | |
LICENSE | 3 年前 | |
README.md | 3 年前 | |
rebar.config | 3 年前 |
otp22+ An erlang's http1.1 server
$ rebar3 compile
$ rebar3 shell
%% starting elli
1 > {ok, Pid} = elli:start_link([{callback, elli_example_callback}, {port, 3000}]).
The best source to learn how to write a callback module is src/elli_example_callback.erl and its generated documentation. There are a bunch of examples used in the tests as well as descriptions of all the events.
A minimal callback module could look like this:
-module(elli_minimal_callback).
-export([handle/2, handle_event/3]).
-include_lib("elli/include/eWSrv.hrl").
-behaviour(wsHer).
handle(Req, _Args) ->
%% Delegate to our handler function
handle(Req#req.method, wsReq:path(Req), Req).
handle('GET', [<<"hello">>, <<"world">>], _Req) ->
%% Reply with a normal response. `ok' can be used instead of `200'
%% to signal success.
{ok, [], <<"Hello World!">>};
handle(_, _, _Req) ->
{404, [], <<"Not Found">>}.
%% @doc Handle request events, like request completed, exception
%% thrown, client timeout, etc. Must return `ok'.
handle_event(_Event, _Data, _Args) ->
ok.
To add elli
to a supervisor you can use the following example and adapt it to your needs.
-module(fancyapi_sup).
-behaviour(supervisor).
-export([start_link/0]).
-export([init/1]).
start_link() ->
supervisor:start_link({local, ?MODULE}, ?MODULE, []).
init([]) ->
ElliOpts = [{callback, fancyapi_callback}, {port, 3000}],
ElliSpec = {
fancy_http,
{elli, start_link, [ElliOpts]},
permanent,
5000,
worker,
[elli]},
{ok, {{one_for_one, 5, 10}, [ElliSpec]}}.
For more information about the features and design philosophy of elli
check out the overview.