2009-07-12 37 views
2

[這隻會意義,如果你已經「在實踐二郎」截屏看到凱文·史密斯']了Mochiweb和gen_server

我是一個Erlang小白試圖建立一個簡單的Erlang/OTP系統,嵌入式Web服務器[受Mochiweb ]。

我已經通過EIP截屏走去,我已經使用new_mochiweb.erl腳本創建簡單了Mochiweb例子玩弄。

我試圖找出Web服務器應該如何與gen_server模塊。在EIP示例[Ch7]中,作者創建了一個web_server.erl gen_server進程並將mochiweb_http進程鏈接到它。然而,在mochiweb項目中,mochiweb_http過程似乎是「獨立的」;它似乎並未嵌入到單獨的gen_server進程中。

我的問題是,如果這些模式中的一個比另一個優先?如果是這樣,爲什麼?或者它沒有關係?

在此先感謝。

回答

1

在監督樹中嵌入處理的原因,這樣,如果失敗,您可以重新啓動它。

一個處理HTTP請求是響應外部產生的事件的方法, - 在瀏覽器中。無法重新啓動它 - 這是運行瀏覽器的人的特權 - 因此不需要在OTP下運行它 - 您可以在沒有監督的情況下產生它。

3

您鏈接流程,你的應用的監督層次的原因有兩個:1)能,如果他們死機,重新啓動工作進程,以及2)能夠當你停止應用程序,以殺死所有的進程。

正如前面回答說,1)是不支持HTTP請求處理過程的情況。但是,2)是有效的:如果你讓你的進程單獨運行,你不能保證在你停止你的應用程序後你的所有進程將從VM中清除(想到進程陷入無限循環,等待進入等等......) )。