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

OTP de Erlang

OTP es la abreviatura de Open Telecom Platform. Es un sistema operativo de aplicaciones y un conjunto de bibliotecas y procesos para construir aplicaciones a gran escala, tolerantes a fallos y distribuidas. Si quieres usar OTP Escribe tu propio programa y descubrirás que el comportamiento de OTP es un concepto central muy útil. El comportamiento encapsula patrones de comportamiento comunes; puede considerarse como un marco de aplicación que se parametriza con módulos de retroalimentación.

Las potentes funcionalidades de OTP vienen de sus características de tolerancia a fallos, escalabilidad, actualización de código dinámica, etc., que pueden ser proporcionadas por el comportamiento en sí mismo. Por lo tanto, el primer concepto básico es crear un componente de servidor que imita el entorno básico de OTP, veamos el siguiente ejemplo idéntico.

Ejemplo en línea

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

Con respecto al programa anterior, hay algunos puntos que destacar:

  • Usar la función register para registrar el proceso en el sistema.

  • Este proceso genera una función de bucle que maneja este proceso.

Ahora, permitemos escribir un programa de cliente que utilice el programa del servidor.

Ejemplo en línea

-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 realmente realiza dos tareas. Actúa como módulo de callback desde el código del marco del servidor, al mismo tiempo, contiene rutinas de interfaz que serán llamadas por el cliente. La convención común en OTP es combinar dos funciones en el mismo módulo.

Por lo tanto, este es el modo en que se debe ejecutar el programa mencionado anteriormente-

EnerlEn, primero ejecute el siguiente comando para ejecutar el programa del servidor.

server(name_server,name_server)

Obtendrá lo siguiente como salida-

Resultado de la salida

true

Luego, ejecute el siguiente comando

name_server.add(erlang,”w3codebox).

Obtendrá lo siguiente como salida-

Resultado de la salida

Ok

Luego, ejecute el siguiente comando-

name_server.whereis(erlang).

Obtendrá lo siguiente como salida-

Resultado de la salida

{ok,"w3codebox"}