Erlang - OTP

OTP son las siglas de Open Telecom Platform. Es un sistema operativo de aplicaciones y un conjunto de bibliotecas y procedimientos que se utilizan para crear aplicaciones distribuidas tolerantes a fallas a gran escala. Si desea programar sus propias aplicaciones utilizando OTP, entonces el concepto central que encontrará muy útil es el comportamiento de OTP. Un comportamiento encapsula patrones de comportamiento comunes; considérelo como un marco de aplicación parametrizado por un módulo de devolución de llamada.

El poder de OTP proviene de propiedades como tolerancia a fallas, escalabilidad, actualización de código dinámico, etc., que puede proporcionar el comportamiento en sí. Entonces, el primer concepto básico es crear un componente de servidor que imite los conceptos básicos de un entorno OTP, veamos el siguiente ejemplo para el mismo.

Ejemplo

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

Se deben tener en cuenta las siguientes cosas sobre el programa anterior:

  • El proceso si está registrado en el sistema usando la función de registro.

  • El proceso genera una función de bucle que maneja el procesamiento.

Ahora escriba un programa cliente que utilice el programa servidor.

Ejemplo

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

Este código en realidad realiza dos tareas. Sirve como un módulo de devolución de llamada que se llama desde el código del marco del servidor y, al mismo tiempo, contiene las rutinas de interfaz que serán llamadas por el cliente. La convención habitual de OTP es combinar ambas funciones en el mismo módulo.

Así que así es como se debe ejecutar el programa anterior:

En erl, primero ejecute el programa del servidor ejecutando el siguiente comando.

server(name_server,name_server)

Obtendrá el siguiente resultado:

Salida

true

Luego, ejecute el siguiente comando

name_server.add(erlang,”Tutorialspoint”).

Obtendrá el siguiente resultado:

Salida

Ok

Luego, ejecute el siguiente comando:

name_server.whereis(erlang).

Obtendrá el siguiente resultado:

Salida

{ok,"Tutorialspoint"}