2009-08-31 60 views
12

閱讀Joe Armstrong的書並觀看Kevin Smith截屏我已經構建了一個由單個gen_server和單個supervisor組成的簡單OTP應用程序,作爲OTP應用程序捆綁在一起。何時在Erlang/OTP應用程序中使用gen_server

現在我正在看mochiweb並使用new_mochiweb.erl腳本創建了一個示例項目[helloworld]。瀏覽源代碼我發現它與我的示例OTP應用程序[OTP應用程序在那裏,主管在那裏]沒有什麼不同,只有一個關鍵區別。生成的helloworld.erl和helloworld_web.erl文件不實現gen_server行爲,它們只是標準的Erlang模塊。

我的印象是使用gen_server是構建OTP應用程序組件時推薦的方法。爲什麼mochiweb可能會使用OTP應用程序和管理員行爲,但避開gen_server?

回答

4

有一個gen_server,叫做mochiweb_socket_server。生成的模塊只是「回調模塊」,用於在接收到傳入請求時調用gen_server。

10

您使用OTP/gen_servers進行重啓策略下的進程 - 即重啓它們是在您的控制下

表示連接到Web瀏覽器的進程不是這種情況。如果該進程死亡,服務器無法重新啓動它 - 因此在OTP下運行它毫無意義。

Mochiweb(和Yaws)都使用gen_servers綁定到監聽端口,然後產生一個無監督進程來處理新的連接。

+3

stdlib應用程序是一個OTP應用程序。啓動時,它沒有任何運行部件。這是一個普通的庫應用程序,用於加載它的模塊,所以其他OTP應用程序可以依靠它來獲取其所有模塊。所以當我們引入模塊時,仍然有使用OTP的理由。 – Christian 2009-08-31 22:27:05

+0

你的權利,我用我的語言是一個slapdash ...你應該使用目錄和東西打包所有代碼的正常OTP方式 - 但有時候做正確的事情只是產生的東西,而不是使用gen_server開始它。 – 2009-09-01 06:40:05

相關問題