English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

OTP في Erlang

OTP هو اختصار لـ Open Telecom Platform. إنه نظام تشغيل تطبيقات، ومجموعة من المكتبات والعمليات لبناء تطبيقات واسعة النطاق، ومتسعة، ومتعددة الأجزاء. إذا كنت ترغب في استخدام OTP كتابة برنامجك الخاص، ستجد أن سلوك OTP هو مفهوم أساسي مفيد جدًا. يدمج السلوك أنماط السلوك الشائعة - يمكن اعتبارها إطار تطبيق يُبرمج من خلال مكونات إعادة الاستدعاء.

قدرة OTP القوية تأتي من خصائصها مثل المرونة، التوسع، التحديث التدريجي للكود، إلخ، التي يمكن توفيرها من خلال السلوك نفسه. لذلك، المفهوم الأساسي الأول هو إنشاء مكون خادم يقلد بيئة OTP الأساسية، لنرى هذا المثال نفسه أدناه.

النموذج المتاح

-module(server). 
-export([start/2, rpc/2]). 
start(Name, Mod) -> 
   register(Name, spawn(fun() -> loop(Name, Mod, Mod:init()) end)). 
rpc(Name, Request) -> 
   Name ! {self(), Request}, 
   استقبال 
      {Name, Response} -> Response 
   end. 
   
loop(Name, Mod, State) ->
   استقبال 
      {From, Request} ->
         {Response, State1} = Mod:handle(Request, State), 
         من ! {Name, Response}, 
         loop(Name, Mod, State1) 
   end.

عن البرنامج المذكور أعلاه، يجب مراعاة النقاط التالية:

  • استخدام دالة register للتسجيل في العملية المسجلة في النظام.

  • يولد هذا العملية دالة حلقة تعالج هذه العملية.

الآن، دعونا نكتب برنامجًا سيعتمد على برنامج الخادم.

النموذج المتاح

-module(name_server). 
-export([init/0, add/2, whereis/1, handle/2]). 
-import(server1, [rpc/2]). 
add(Name, Place) -> rpc(name_server, {add, Name, Place}). 
whereis(Name) -> rpc(name_server, {whereis, Name}). 
init() -> dict:new().
handle({add, Name, Place}, Dict) -> {ok, dict:store(Name, Place, Dict)}; 
handle({whereis, Name}, Dict) -> {dict:find(Name, Dict), Dict}.

يؤدي هذا الكود في الواقع مهمتين. يلعب دورًا كـ مكتبة استدعاء مسبق من قبل كود إطار الخادم، ويحتوي أيضًا على واجهات البرمجة التي سيتم استدعاؤها من قبل العملاء. يتبع OTP عادةً تقليد دمج الفونكشنتين في نفس المكتبة.

لذلك هذا هو الطريقة التي يجب على البرنامج الأصلي تنفيذها -

فيerlفيها، أولاً، عبر تشغيل الأمر التالي لبدء برنامج الخادم.

server(name_server,name_server)

ستحصل على النتائج التالية -

نتائج الافراج

true

ثم، تشغيل الأمر التالي

name_server.add(erlang,"w3codebox").

ستحصل على النتائج التالية -

نتائج الافراج

Ok

ثم، تشغيل الأمر التالي -

name_server.whereis(erlang).

ستحصل على النتائج التالية -

نتائج الافراج

{ok,"w3codebox"}