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

OTP (Open Telecom Platform) do Erlang

OTP é a abreviação de Open Telecom Platform. É um sistema operacional de aplicativo e um conjunto de bibliotecas e processos para construir aplicações em larga escala, tolerantes a falhas e distribuídas. Se você quiser usar OTP Escreva seu próprio programa e você descobrirá que o comportamento OTP é um conceito central muito útil. O comportamento encapsula padrões de comportamento comuns - pode ser visto como uma framework de aplicativo parametrizada por módulos de callback.

As poderosas funcionalidades do OTP vêm de suas características de tolerância a falhas, escalabilidade, atualização de código dinâmico, entre outras, que podem ser fornecidas pelo próprio comportamento. Portanto, o primeiro conceito básico é criar um componente de servidor que imita o ambiente básico do OTP, vamos ver o exemplo abaixo.

Exemplo Online

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

Quanto ao programa acima, é importante notar os seguintes pontos:

  • Usar a função register para registrar o processo no sistema.

  • Este processo gera uma função de loop de processamento para o próprio processo.

Agora, vamos escrever um programa cliente que utilizará o programa do servidor.

Exemplo Online

-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 executa duas tarefas. Ele atua como módulo de callback chamado pelo código da framework do servidor, ao mesmo tempo, ele contém rotinas de interface que serão chamadas pelo cliente. A convenção usual do OTP é combinar duas funções no mesmo módulo.

Portanto, este é o modo de execução necessário para o programa acima.-

EmerlNeste arquivo, primeiramente execute o seguinte comando para executar o programa do servidor.

server(name_server,name_server)

Você obterá a seguinte saída-

Resultado de Saída

true

Em seguida, execute o seguinte comando

name_server.add(erlang,”w3codebox).

Você obterá a seguinte saída-

Resultado de Saída

Ok

Em seguida, execute o seguinte comando-

name_server.whereis(erlang).

Você obterá a seguinte saída-

Resultado de Saída

{ok,"w3codebox"}