Erlang - OTP

OTP signifie Open Telecom Platform. Il s'agit d'un système d'exploitation d'application et d'un ensemble de bibliothèques et de procédures utilisées pour créer des applications distribuées à grande échelle, tolérantes aux pannes. Si vous souhaitez programmer vos propres applications en utilisant OTP, le concept central que vous trouverez très utile est le comportement OTP. Un comportement encapsule des modèles de comportement courants - pensez-y comme un cadre d'application qui est paramétré par un module de rappel.

La puissance d'OTP vient des propriétés telles que la tolérance aux pannes, l'évolutivité, la mise à niveau du code dynamique, etc., peuvent être fournies par le comportement lui-même. Donc, le premier concept de base est de créer un composant serveur qui imite les bases d'un environnement OTP, regardons l'exemple suivant pour le même.

Exemple

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

Les choses suivantes doivent être notées à propos du programme ci-dessus -

  • Le processus s'il est enregistré avec le système à l'aide de la fonction d'enregistrement.

  • Le processus génère une fonction de boucle qui gère le traitement.

Écrivons maintenant un programme client qui utilisera le programme serveur.

Exemple

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

Ce code effectue en fait deux tâches. Il sert de module de rappel qui est appelé à partir du code de la structure du serveur, et en même temps, il contient les routines d'interfaçage qui seront appelées par le client. La convention OTP habituelle est de combiner les deux fonctions dans le même module.

Alors, voici comment le programme ci-dessus doit être exécuté -

Dans erl, exécutez d'abord le programme serveur en exécutant la commande suivante.

server(name_server,name_server)

Vous obtiendrez la sortie suivante -

Production

true

Ensuite, exécutez la commande suivante

name_server.add(erlang,”Tutorialspoint”).

Vous obtiendrez la sortie suivante -

Production

Ok

Ensuite, exécutez la commande suivante -

name_server.whereis(erlang).

Vous obtiendrez la sortie suivante -

Production

{ok,"Tutorialspoint"}