Elli es un servidor web que puede ejecutar dentro de su aplicación Erlang para exponer una API HTTP. Está dirigido exclusivamente a crear API HTTP de alto rendimiento y baja latencia. Si la solidez y el rendimiento son más importantes para usted que las funciones de uso general, entonces Elli podría ser para usted. Si se encuentra investigando la implementación de un servidor web, entonces Elli podría ser para usted. Si está creando servicios web, no sitios web, entonces Elli podría ser para usted.
Elli requiere OTP 22.0 o posterior.
Agregue elli
a su aplicación como una dependencia de su rebar.config
:
{ deps , [
{ elli , " 3.3.0 " }
]}.
Luego, para compilarlo, puedes ejecutar:
rebar3 compile
Para iniciar Elli dentro de un shell Erlang, ejecute:
rebar3 shell
% % starting elli
1 > { ok , Pid } = elli : start_link ([{ callback , elli_example_callback }, { port , 3000 }]).
La mejor fuente para aprender a escribir un módulo de devolución de llamada es elli_example_callback
. También hay un montón de ejemplos utilizados en las pruebas, así como descripciones de todos los eventos.
Un módulo de devolución de llamada mínimo se parece a esto:
- 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 agregar elli
a un supervisor puedes utilizar el siguiente ejemplo y adaptarlo a tus necesidades.
- 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 obtener más información sobre las características y la filosofía de diseño de Elli, consulte la overview
.
Elli tiene licencia bajo la licencia MIT.