erlang app程式打包及啟動流程

來源:互聯網
上載者:User
 

我們寫完一組功能模組後(在erlang中,以module為單位),總是希望這一組模組,可以打包成一個應用,作為一個單獨的整個,可以啟動,停止,象 mnesia一樣。並可以在其它應用中引用。如何來做到這一點呢。每一個應用都是通過application:start系列函數來啟動,application:stop可以停止一個應用。 
一個應用需要一個.app檔案來描述,主要描述它包括哪些檔案,參數等。 
如果在啟動erlang的VM時就啟動一個應用呢,實際上,我們是沒有辦法通過VM的參數來直接啟動一個自訂應用,有些參數如:start_sasl可以啟動一些內部的標準的build-in應用,但是我們可以給VM一個執行入口,這就象C語言或是java語言的main函數一樣,VM啟動時,執行這個程式的進入點,這樣就可以在這個入口中執行啟動應用的操作。 

這個進入點通過參數-s 來指定。下面我們來看一個例子: 

1.   erl  -s erlycomet_demo 
     這個參數指定,VM啟動後,調用erlycomet_demo:start()無參函數 

2.   在erlycomet_demo:start()函數中,我們寫如下代碼: 
        application:start(erlycomet_demo). 

        上面這句話,啟動一個erlycomet_demo的應用,這裡,VM就會在搜尋目錄中找到erlycomet_demo.app這個檔案,如果不到,報錯,如果找到,則按這個檔案中的指示,啟動erlycomet_demo應用。這一部分可以參看相關的文檔,簡單的,在erlycomet_demo中一搬有一個參數{mod,{mod_name_app,[]}} 
        這個參數指示,調用mod_name_app:start(_type,Argu)這個函數。以erlycomet_demo為例,這個調用進入到erlycomet_demo_app:start(_type,Argu)中, 

3. 在erlycomet_demo_app的start(_type,Argu)中,啟動 一個supervisor進程,進而啟動子進程。如下所示: 
        erlycomet_demo_sup:start_link(Args). 

瞭解了,我們是通過application為單位來打包應用的,那麼我們如何才能共用應用呢??比如,我們如何在應用A中使用應用2的功能呢??答應是:以應用為單位來進行引用,例如:我們要便用mnesia功能,我就就調用mnesia:start()或是在應用A的application中指定,要啟動 mnesia。  在OPT中,有很多應用都是相互獨立,而又相互引用的。比如:mnesia, crpyto,inet 等。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.