Elli adalah server web yang dapat Anda jalankan di dalam aplikasi Erlang untuk mengekspos API HTTP. Hal ini ditujukan secara eksklusif untuk membangun API HTTP dengan throughput tinggi dan latensi rendah. Jika ketahanan dan kinerja lebih penting bagi Anda dibandingkan fitur tujuan umum, maka Elli mungkin cocok untuk Anda. Jika Anda sedang mendalami implementasi server web, maka Elli mungkin cocok untuk Anda. Jika Anda sedang membangun layanan web, bukan situs web, Elli mungkin cocok untuk Anda.
Elli membutuhkan OTP 22.0 atau lebih baru.
Tambahkan elli
ke aplikasi Anda sebagai ketergantungan pada rebar.config
Anda:
{ deps , [
{ elli , " 3.3.0 " }
]}.
Setelah itu, untuk mengkompilasinya, Anda dapat menjalankan:
rebar3 compile
Untuk mem-boot Elli di dalam shell Erlang, jalankan:
rebar3 shell
% % starting elli
1 > { ok , Pid } = elli : start_link ([{ callback , elli_example_callback }, { port , 3000 }]).
Sumber terbaik untuk mempelajari cara menulis modul panggilan balik adalah elli_example_callback
. Ada juga banyak contoh yang digunakan dalam tes serta deskripsi semua kejadian.
Modul panggilan balik minimal terlihat seperti ini:
- 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 .
Untuk menambahkan elli
ke supervisor Anda dapat menggunakan contoh berikut dan menyesuaikannya dengan kebutuhan Anda.
- 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 ]} }.
Untuk informasi lebih lanjut tentang fitur dan filosofi desain Elli, lihat overview
.
Elli dilisensikan di bawah Lisensi MIT.