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

ErlangOTP

OTP ist die Abkürzung für Open Telecom Platform. Es ist ein Anwendungsbetriebssystem sowie eine Reihe von Bibliotheken und Prozessen zur Erstellung von groß angelegten, fehler容忍 und verteilten Anwendungen. Wenn Sie OTP verwenden möchten Schreiben Sie Ihr eigenes Programm, und Sie werden feststellen, dass das OTP-Verhalten ein sehr nützliches Kernelement ist. Das Verhalten verpackt gängige Verhaltensmuster - es kann als eine von Callback-Modul-Parametern parametrierte Anwendungsrahmen betrachtet werden.

Die mächtigen Funktionen von OTP stammen aus seiner Fehler容忍性, Skalierbarkeit, dynamische Code-Upgrade und anderen Eigenschaften, die durch das Verhalten selbst bereitgestellt werden. Daher ist der erste Grundbegriff, eine Server-Komponente zu erstellen, die das OTP-Umfeld grundlegend nachahmt, lassen Sie uns den folgenden gleichen Beispiel sehen.

Online-Beispiel

-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}, 
   empfangen 
      {Name, Response} -> Response 
   end. 
   
loop(Name, Mod, State) ->
   empfangen 
      {From, Request} ->
         {Response, State1} = Mod:handle(Request, State), 
         From ! {Name, Response}, 
         loop(Name, Mod, State1) 
   end.

Bezüglich des obigen Programms sollten Sie folgende Punkte beachten:

  • Verwenden Sie die Funktion register, um den Prozess beim System zu registrieren.

  • Dieser Prozess generiert eine Schleifenfunktion zur Verarbeitung des Prozesses.

Lassen Sie uns nun einen Client-Programm schreiben, das den Server-Programm nutzt.

Online-Beispiel

-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}.

Dieser Code führt tatsächlich zwei Aufgaben aus. Es dient als Callback-Modul, das vom Server-Framework-Code aufgerufen wird, und enthält gleichzeitig die Schnittstellenroutinen, die vom Client aufgerufen werden. Die OTP-Übung besteht darin, zwei Funktionen in einer Modul zu kombinieren.

Das ist also der Weg, wie das obige Programm ausgeführt werden muss-

InerlIn, führen Sie zuerst die folgenden Befehl aus, um das Serverprogramm zu starten.

server(name_server,name_server)

Sie erhalten die folgenden Ausgaben-

Ausgabenergebnis

true

Dann führen Sie folgenden Befehl aus

name_server.add(erlang,"w3codebox).

Sie erhalten die folgenden Ausgaben-

Ausgabenergebnis

Ok

Dann führen Sie folgenden Befehl aus-

name_server.whereis(erlang).

Sie erhalten die folgenden Ausgaben-

Ausgabenergebnis

{ok,"w3codebox"}