Elli ist ein Webserver, den Sie in Ihrer Erlang-Anwendung ausführen können, um eine HTTP-API bereitzustellen. Es zielt ausschließlich auf den Aufbau von HTTP-APIs mit hohem Durchsatz und geringer Latenz ab. Wenn Ihnen Robustheit und Leistung wichtiger sind als Allzweckfunktionen, dann könnte Elli das Richtige für Sie sein. Wenn Sie sich mit der Implementierung eines Webservers befassen, ist Elli möglicherweise das Richtige für Sie. Wenn Sie Webdienste und keine Websites erstellen, ist Elli möglicherweise das Richtige für Sie.
Elli benötigt OTP 22.0 oder neuer.
Fügen Sie Ihrer Anwendung elli
als Abhängigkeit zu Ihrer rebar.config
hinzu:
{ deps , [
{ elli , " 3.3.0 " }
]}.
Anschließend können Sie zum Kompilieren Folgendes ausführen:
rebar3 compile
Führen Sie Folgendes aus, um Elli in einer Erlang-Shell zu starten:
rebar3 shell
% % starting elli
1 > { ok , Pid } = elli : start_link ([{ callback , elli_example_callback }, { port , 3000 }]).
Die beste Quelle, um zu lernen, wie man ein Callback-Modul schreibt, ist elli_example_callback
. Es gibt auch eine Reihe von Beispielen, die in den Tests verwendet wurden, sowie Beschreibungen aller Ereignisse.
Ein minimales Callback-Modul sieht in etwa so aus:
- 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 .
Um elli
zu einem Supervisor hinzuzufügen, können Sie das folgende Beispiel verwenden und es an Ihre Bedürfnisse anpassen.
- 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 ]} }.
Weitere Informationen zu den Funktionen und der Designphilosophie von Elli finden Sie in der overview
.
Elli ist unter der MIT-Lizenz lizenziert.