在检查Gen_Fsm和Gen_Server文档后,我发现它们或多或少地表现为类似的行为。在我看来,如果有一个循环函数用于发送广播或监听tcp sock,最好使用Gen_Fsm,否则使用gen_server。我想知道它是否正确?
答案 0 :(得分:9)
您已经看到gen_server
和gen_fsm
在功能上非常相似。
但是,在大多数程序中,使用gen_server
比使用gen_fsm
要多得多。
在我看来gen_fsm
仅在使用100%符合gen_fsm模型时才有用。因此,必须有一个简单明了的有限状态机,适合您的问题。请注意,通常FSM的状态计数往往会在现实世界中爆炸。
如果您发现自己在gen_fsm
的{{1}}变量中有大量次要状态信息,则可能需要切换到State
并将gen_server
的状态添加到gen_fsm
变量。
通常在有疑问时:使用State
gen_server
和gen_server
的一个缺点(通常在gen_fsm
中更糟糕)是您无法使用选择性接收。选择性接收是降低现实应用中状态机复杂性的重要工具。
为了获得选择性接收和OTP行为的优势,我建议plain_fsm。