2017-08-30 51 views
0

我不確定我是否可以正確表達我的問題,但我會盡我所能。Erlang如何設置自包含的主管樹應用程序

我覺得你必須設置一個主管樹(sup,supress,和其他更復雜的樹)的方式很尷尬。

讓我們舉個例子,下面的(我已經做出例子,它們擴展):http://learnyousomeerlang.com/supervisors

我不喜歡開始我的應用程序(導師樹),然後無需發送ERL命令的想法在外殼上讓應用程序按照我想要的方式行事。從網站採取底殼例如:

1> supervisor:start_child(band_supervisor, [djembe, good]). 
Musician Janet Tennelli, playing the djembe entered the room 
{ok,<0.690.0>} 
2> supervisor:start_child(band_supervisor, [djembe, good]). 
{error,{already_started,<0.690.0>}} 
3> supervisor:start_child(band_supervisor, [drum, good]). 
Musician Arnold Ramon, playing the drum entered the room 
{ok,<0.696.0>} 
3> supervisor:start_child(band_supervisor, [guitar, good]). 
Musician Wanda Perlstein, playing the guitar entered the room 
{ok,<0.698.0>} 
4> supervisor:terminate_child(band_supervisor, djembe). 
{error,simple_one_for_one} 
5> musicians:stop(drum). 
Arnold Ramon left the room (drum) 
ok 

對我來說很是怪異,我將不得不開始我的上司(或其他),然後在通過shell其他命令進一步類型得到我想要的東西。

對於一個現實世界的例子,讓我們說例如我有一個監聽主管,在這個主管我說我想總是有100個監聽工作人員。他們的工作是監聽Listen Supervisor創建的套接字。鑑於教程(和其他在線),我將不得不輸入100次的shell來啓動所有的孩子。

所以,我想我的問題是下面...

這怎麼都可以申請或主管(但是要做到這一點)內完成的,所以什麼也沒被鍵入到外殼開始你的光束文件後。

我知道必須有一種方法,但我不能想出一個足夠好的架構,允許我這樣做是一種標準和乾淨的方式。

謝謝你的時間。

回答

1

您有一些選擇。

您可以在env of .app filesys.config file中定義一些變量,並將其置於主管的init/1中,並返回足夠數量的子規格。

如果孩子的數量和其他信息來自其他代碼,他們可能會在不同的時間,你可以有一個名爲dispatcher的孩子在主管,你的調度員的責任是獲得關於首發兒童的信息,並開始他們的孩子主管。

+0

因此,對於每個listen_worker,我需要在listen_sup中有一個子規範?我以爲我不需要那樣做,只需要添加主管命令的孩子? – Mike5050

+0

是的,你需要,當你開始一個新的孩子,你添加新的childspec主管的childspecs。 – Pouriya

+0

所以我只需要一種方法來生成100個子規格......是否有一些代碼會自動執行此操作? (他們都是同樣的工人) – Mike5050

相關問題