Erlang - OTP



OTP 代表開放電信平臺。它是一個應用程式作業系統,以及一組用於構建大型、容錯、分散式應用程式的庫和過程。如果您想使用 OTP 編寫自己的應用程式,那麼您會發現非常有用的核心概念是 OTP 行為。行為封裝了常見的行為模式——可以將其視為一個由回撥模組引數化的應用程式框架。

OTP 的強大功能來自諸如容錯、可擴充套件性、動態程式碼升級等特性,這些特性可以由行為本身提供。因此,第一個基本概念是建立一個伺服器元件來模擬 OTP 環境的基礎,讓我們看一下以下示例。

示例

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

關於以上程式,需要注意以下幾點:

  • 使用 register 函式將程序註冊到系統中。

  • 該程序生成一個迴圈函式來處理處理。

現在讓我們編寫一個客戶端程式來利用伺服器程式。

示例

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

此程式碼實際上執行兩個任務。它充當從伺服器框架程式碼呼叫的回撥模組,同時包含客戶端將呼叫的介面例程。通常的 OTP 約定是在同一個模組中組合這兩個函式。

因此,以下是上述程式的執行方式:

erl中,首先透過執行以下命令執行伺服器程式。

server(name_server,name_server)

您將獲得以下輸出:

輸出

true

然後,執行以下命令

name_server.add(erlang,”Tutorialspoint”).

您將獲得以下輸出:

輸出

Ok

然後,執行以下命令:

name_server.whereis(erlang).

您將獲得以下輸出:

輸出

{ok,"Tutorialspoint"}
廣告

© . All rights reserved.