所以我們通用的部分和特定的部分都歸功於erlang/OTP行爲,這大大簡化了我們的代碼,併爲我們提供了一個每個人都能理解的通用框架。應該執行哪些行爲?
我是Erlang的新手,並試圖讓我的頭腦圍繞OTP的概念。 但當中
- gen_server
- 的gen_fsm
- gen_event
- 主管
其行爲適用於什麼樣的應用。
我之所以問這個問題,是因爲經過一些詳細的理論後,我仍然不確定哪個更適合XYZ應用。
是否有任何標準或經驗法則,還是隻是程序員本能在這種情況下的本能? 有什麼幫助嗎?
所以我們通用的部分和特定的部分都歸功於erlang/OTP行爲,這大大簡化了我們的代碼,併爲我們提供了一個每個人都能理解的通用框架。應該執行哪些行爲?
我是Erlang的新手,並試圖讓我的頭腦圍繞OTP的概念。 但當中
其行爲適用於什麼樣的應用。
我之所以問這個問題,是因爲經過一些詳細的理論後,我仍然不確定哪個更適合XYZ應用。
是否有任何標準或經驗法則,還是隻是程序員本能在這種情況下的本能? 有什麼幫助嗎?
備註,這是一個非常普遍的問題,不適合使用這個社區。
主管在這裏控制應用程序啓動和演變的方式。 它以正確的順序啓動進程,並驗證一切正常,管理失敗時的重啓策略,進程池,監督樹......優點是它可以幫助您按照「讓它崩潰」規則在您的應用程序中,它將精力集中在幾行代碼中,以協調您的所有流程。
我使用gen_event主要用於記錄目的。您可以使用此行爲根據您的目標按需連接不同的處理程序。在我的一個應用程序中,我默認有一個圖形記錄器,允許一眼查看行爲,以及一個文本文件處理程序,可以進行更深入的事後分析。
Gen_server是所有應用程序的基本磚塊。它允許保持狀態,在通話中響應,投射甚至簡單的信息。它管理代碼更改並提供啓動和停止的功能。我的大部分模塊都是gen_servers,你可以將它看作是負責執行單個任務的actor。
Gen_fsm爲gen server帶來了具有特定行爲的當前狀態的概念,以及從狀態到狀態的轉換。它可用於例如在遊戲中控制遊戲的進化(配置,等待玩家,玩,改變等級......)
當你創建一個應用程序時,你將識別你必須做的不同任務並將它們分配給gen_server或gen_fsm。您將添加gen_event以允許發佈/訂閱機制。然後,您將必須將所有進程分組,考慮其依賴性和錯誤恢復。這會給你監督樹和重啓策略。
我使用以下規則。
gen_server
。gen_fsm
是個好主意。例如,我喜歡使用gen_fsm
來實現網絡協議。gen_event
。