elli
3.1.0
Elli 是一個網頁伺服器,您可以在 Erlang 應用程式中執行以公開 HTTP API。它專門致力於建立高吞吐量、低延遲的 HTTP API。如果穩健性和效能對您來說比通用功能更重要,那麼 Elli 可能適合您。如果您發現自己正在深入研究網頁伺服器的實現,那麼 Elli 可能適合您。如果您正在建立網路服務,而不是網站,那麼 Elli 可能適合您。
Elli 需要 OTP 22.0 或更高版本。
將elli
加入您的應用程式作為rebar.config
的依賴項:
{ deps , [
{ elli , " 3.3.0 " }
]}.
然後,要編譯它,您可以執行:
rebar3 compile
若要在 Erlang shell 中啟動 Elli,請執行:
rebar3 shell
% % starting elli
1 > { ok , Pid } = elli : start_link ([{ callback , elli_example_callback }, { port , 3000 }]).
學習如何編寫回調模組的最佳來源是elli_example_callback
。還有大量測試中使用的範例以及所有事件的描述。
最小的回調模組看起來像這樣:
- 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 .
要將elli
新增至主管,您可以使用以下範例並根據您的需求進行調整。
- 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 ]} }.
有關 Elli 的功能和設計理念的更多信息,請查看overview
。
Elli 獲得了 MIT 許可證的許可。