erlang專案常見OTP行為模式

2021-08-10 06:58:32 字數 2224 閱讀 1354

最近學習erlang有一些眉目了。在使用otp進行erlang專案開發時,會遇到很多otp的行為模式。而這種行為模式,有一些像面像物件中的設計模式。了解了這些東西,可以更好的使用otp庫進行erlang專案開發。起到了事半功倍的效果。下邊是我最近學習的過程中見到的行為模式,我們從乙個專案的建立開始。

一、專案目錄建立

專案創鍵時,首先是建立專案目錄結構,打個比方,我們的專案說叫test.那麼我們一般是建立乙個檔案件,起名為test,並在這個目錄下邊建立一些子目錄,子目錄和名字和作用如下:

doc:用來儲存應用的說明文件

include:用來儲存儲存全域性記錄或者元組的.hel檔案,或者預定義頭。

priv:用來儲存與專案執行相關的其他檔案,比如第三方語言寫的庫,或者像c++的動態庫

src:所有的erl原始碼都會儲存在這個資料夾下。

二、編輯專案啟動元組資料

[, ,

test_sup,

test_server]},

,]}.

通過**我們可以看到三個資料,

就是乙個原子說明,說明元組資料是乙個應用元組資料。

第二個是test:

很明顯,這是我們的應用名稱。

第三個是乙個陣列,我們可以看到陣列中儲存的所有資料都是以鍵值對的形式儲存的。其中:

1.description,是說明部分。

2.vsn,這個是版本號,一般情況下,這裡的版本號最好是按標準的主版本號,次版本號,分版本號來進行填寫,因為有的時候,這個版本號會在**熱更新的時候用到。

3.modules,這裡存的所有專案模組。

4.registered,註冊程序,這個果註冊到系統的單例模組程序名。

6.mod,應用啟動時的模組,以及模組啟動時所要代的引數。

三、模組建立

start(

_starttype

, _startargs

) ->

test_sup:start_link().

stop(_state) ->

ok.可以看到,乙個是start(_starttype,startargs),乙個是stop(_state).一般情況下,start會在他的這個函式中呼叫你自已編寫的監管者行為模式的start_link函式。而stop就只是簡單的停止應用。

這裡的starttype和startargs是應用啟動時的兩個要傳給監督者程序的引數。

2.當我們的應用行為模式模組建好了之後,下乙個自然就是用這個應用行為模式啟動的應用根監管者行為模式模組test_sup了。監督者行為模式模組的主要任務就是管理其他子監督者模組和工作模組。一般定義模組時,除了監督者模組外其他的都是工作模組了,包括使用者自已功能性模組也是工作模組。常見的工作行為模式就是gen_server行為模式,其他的我還沒有學到。等學到了再來新增。

在監督者行為模式中,我們會看到下邊的幾個主要方法:

start_link() ->

supervisor:start_link(, ?module, ).

init() ->

server = ,

permanent, 2000, worker, [tr_server]},

children= [server],

restartstrategy = ,}.

比如這裡的start_link()函式,這個函式其實就是通過otp的supervisor模組來呼叫自已的init()方法。而在這個呼叫的過程中,其實就把自已註冊進了otp的系統中了。同樣的,otp的其他行為模式,也基本上都是這種方式把自已的程序模組註冊進otp系統,由otp系統來管理自已用行為模式建立的模組。

再說一下這裡的init方法吧,這個方法裡主要的一些引數格式是告訴otp系統讓otp系統來管理你的程序,像這裡的,前邊的one_for_one,意思就是如果監督者有子程序錯誤退出,那麼只啟動這乙個子程序,其他子程序不用啟起。後邊的0,1的意思是在1秒中退出的重起的最大次數為0,也就是子程序出錯退出了,就不重起了。上邊的server中的無組中儲存的資料是,監督者要起用的程序模組是那乙個模組,模組是退出永遠自動重啟,還是永不重啟,後邊的2000意思是程式退出給的緩衝時間,這裡可以設定成brutal_kill表示程序退出時馬上退出。再後邊的worker表示啟動的程序為工作程序。最後邊的陣列是要啟動的模組。

3.當然了,我們都有監督者模組了。怎麼也得有乙個讓監督者模組來監督的東西吧。這裡很自然的就走到了工作程序模組和子監督者程序模組。

總而言之,這樣一直建立下去,一步一步的就把整個系統建立好了。

erlang開發中的簡單程序框架 非OTP

module template record stat,export start 1,stop 0,reload 0,init 1,loop 1 start opts stat parse opts opts pid erlang spawn fun init stat end register m...

erlang常見基礎

每乙個檔案通常稱為乙個模組 module 需要特別注意的是在這一行末尾的 這個是不可或缺的。每乙個模組的名稱必須和它的檔名一樣 注意這裡的結尾是 表明這個方法還沒有結束 在函式中的引數 n,x,y 我們稱之為變數。變數的首字母需要大寫 常量是erlang的另一種資料型別。常量以小寫字母開頭 常量就是...

OTP在實際專案中的整合

提起動態令牌,大家都會想到認證伺服器,而這個認證伺服器又怎麼應用到實際的應用系統中呢?在這裡做乙個分析和說明,幫助廣大使用者能夠更好的使用otp動態令牌這種身份認證產品。從前面otp原理部分中可以看出,伺服器端是在乙個範圍內計算出多個otp,然後檢驗客戶端硬體產生的otp口令是否在這個範圍內。那麼伺...