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

OTP Erlang

OTP est l'acronyme de Open Telecom Platform. C'est un système d'exploitation d'application et un ensemble de bibliothèques et de procédures pour construire des applications à grande échelle, tolérantes aux pannes et distribuées. Si vous voulez utiliser OTP Écrivez votre propre programme, et vous会发现 OTP 行为是非常有用的核心概念。行为封装了常见的行为模式ーー可以把它看作是一个由回调模块参数化的应用程序框架。

Les fonctionnalités puissantes d'OTP viennent de sa tolérance aux pannes, sa capacité d'échelle, la mise à jour de code dynamique, etc., qui peuvent être fournies par le comportement lui-même. Par conséquent, la première idée de base est de créer un composant serveur qui imite l'environnement de base d'OTP, regardons l'exemple suivant.

Exemple en ligne

-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}, 
   reçoit 
      {Name, Réponse} -> Réponse 
   end. 
   
loop(Name, Mod, State) ->
   reçoit 
      {From, Request} ->
         {Response, State1}= Mod:handle(Request, State), 
         From ! {Name, Response}, 
         loop(Name, Mod, State1) 
   end.

Pour le programme ci-dessus, il convient de noter les points suivants :

  • Utilisez la fonction register pour enregistrer le processus auprès du système.

  • Ce processus génère une fonction de boucle de traitement pour ce processus.

Maintenant, écrivons un programme client qui utilisera le programme serveur.

Exemple en ligne

-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 exécute deux tâches. Il agit en tant que module de rappel appelé à partir du code de cadre serveur, et contient également des routines d'interface appelées par le client. La convention habituelle OTP consiste à combiner deux fonctions dans le même module.

C'est donc la manière dont le programme ci-dessus doit être exécuté-

DanserlDans, tout d'abord, exécutez la commande suivante pour exécuter le programme serveur.

server(name_server,name_server)

Vous obtiendrez le résultat suivant-

Résultat de la sortie

true

Ensuite, exécutez la commande suivante

name_server.add(erlang,”w3codebox).

Vous obtiendrez le résultat suivant-

Résultat de la sortie

Ok

Ensuite, exécutez la commande suivante-

name_server.whereis(erlang).

Vous obtiendrez le résultat suivant-

Résultat de la sortie

{ok,"w3codebox"}