- Erlang 教程
- Erlang - 首頁
- Erlang - 概述
- Erlang - 環境
- Erlang - 基本語法
- Erlang - Shell
- Erlang - 資料型別
- Erlang - 變數
- Erlang - 運算子
- Erlang - 迴圈
- Erlang - 決策
- Erlang - 函式
- Erlang - 模組
- Erlang - 遞迴
- Erlang - 數字
- Erlang - 字串
- Erlang - 列表
- Erlang - 檔案 I/O
- Erlang - 原子
- Erlang - 對映
- Erlang - 元組
- Erlang - 記錄
- Erlang - 異常
- Erlang - 宏
- Erlang - 標頭檔案
- Erlang - 預處理器
- Erlang - 模式匹配
- Erlang - 保衛
- Erlang - BIFS
- Erlang - 二進位制
- Erlang - 函式
- Erlang - 程序
- Erlang - 郵件
- Erlang - 資料庫
- Erlang - 埠
- Erlang - 分散式程式設計
- Erlang - OTP
- Erlang - 併發
- Erlang - 效能
- Erlang - 驅動程式
- Erlang - Web 程式設計
- Erlang 有用資源
- Erlang - 快速指南
- Erlang - 有用資源
- Erlang - 討論
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"}
廣告