Elli é um servidor web que você pode executar dentro de seu aplicativo Erlang para expor uma API HTTP. Destina-se exclusivamente à construção de APIs HTTP de alto rendimento e baixa latência. Se robustez e desempenho são mais importantes para você do que recursos de uso geral, então o Elli pode ser para você. Se você estiver investigando a implementação de um servidor web, então Elli pode ser para você. Se você está construindo serviços web, não sites, então Elli pode ser para você.
Elli requer OTP 22.0 ou mais recente.
Adicione elli
ao seu aplicativo como uma dependência do seu rebar.config
:
{ deps , [
{ elli , " 3.3.0 " }
]}.
Depois, para compilá-lo, você pode executar:
rebar3 compile
Para inicializar o Elli dentro de um shell Erlang, execute:
rebar3 shell
% % starting elli
1 > { ok , Pid } = elli : start_link ([{ callback , elli_example_callback }, { port , 3000 }]).
A melhor fonte para aprender como escrever um módulo de retorno de chamada é elli_example_callback
. Há também vários exemplos usados nos testes, bem como descrições de todos os eventos.
Um módulo de retorno de chamada mínimo se parece com isto:
- module ( elli_minimal_callback ).
- behaviour ( elli_handler ).
- include_lib ( " elli/include/elli.hrl " ).
- export ([ handle / 2 , handle_event / 3 ]).
handle ( Req , _Args ) ->
% % Delegate to our handler function
Method = Req # req . method ,
Path = elli_request : path ( Req ),
handle ( Method , Path , Req ).
handle ( 'GET' = _Method , [<< " hello " >>, << " world " >>] = _Path , _Req ) ->
% % Reply with a normal response. `ok' can be used instead of `200'
% % to signal success.
StatusCode = ok ,
Headers = [],
Body = << " Hello World! " >>,
{ StatusCode , Headers , Body };
handle ( _Method , _Path , _Req ) ->
{ 404 , [], << " Not Found " >>}.
% % @doc Handle request events: request completed, exception
% % thrown, client timeout, etc. Must return `ok'.
handle_event ( _Event , _Data , _Args ) ->
ok .
Para adicionar elli
a um supervisor você pode usar o exemplo a seguir e adaptá-lo às suas necessidades.
- module ( elli_minimal_sup ).
- behaviour ( supervisor ).
- export ([ start_link / 0 , init / 1 ]).
start_link () ->
SupName = { local , ? MODULE },
Module = ? MODULE ,
Args = [],
supervisor : start_link ( SupName , Module , Args ).
init ([] = _Args ) ->
ElliOpts = [
{ callback , elli_minimal_callback },
{ port , 3000 }
],
ElliSpec = {
_Id = elli_minimal_http ,
_Start = { elli , start_link , [ ElliOpts ]},
_Restart = permanent ,
_Shutdown = 5000 ,
_Worker = worker ,
_Modules = [ elli ]},
{ ok , {{ _Strategy = one_for_one , _Intensity = 5 , _Period = 10 }, [ ElliSpec ]} }.
Para obter mais informações sobre os recursos e a filosofia de design da Elli, confira a overview
.
Elli é licenciada sob a licença MIT.