Elli هو خادم ويب يمكنك تشغيله داخل تطبيق Erlang الخاص بك للكشف عن واجهة برمجة تطبيقات HTTP. إنه يهدف حصريًا إلى إنشاء واجهات برمجة تطبيقات HTTP عالية الإنتاجية ومنخفضة الكمون. إذا كانت المتانة والأداء أكثر أهمية بالنسبة لك من ميزات الأغراض العامة، فقد يكون Elli هو الخيار المناسب لك. إذا وجدت نفسك تتعمق في تنفيذ خادم الويب، فقد يكون Elli هو الحل المناسب لك. إذا كنت تقوم بإنشاء خدمات ويب، وليس مواقع ويب، فقد يكون Elli هو المكان المناسب لك.
يتطلب Elli OTP 22.0 أو أحدث.
أضف elli
إلى تطبيقك باعتباره تابعًا لـ rebar.config
:
{ deps , [
{ elli , " 3.3.0 " }
]}.
بعد ذلك، لتجميعه، يمكنك تشغيل:
rebar3 compile
لتشغيل Elli داخل غلاف Erlang، قم بتشغيل:
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.