查看 Gen_Fsm 和 Gen_Server 文档后,我发现它们或多或少具有相似的行为。在我看来,如果有一个循环函数用于发送广播或监听 tcp sock,最好使用 Gen_Fsm,否则使用 gen_server。我想知道它是否正确?
问问题
2652 次
1 回答
9
您已经看对了,gen_server
并且gen_fsm
在功能上非常相似。
然而,在大多数程序中,gen_server
不仅仅是gen_fsm
使用。
在我看来gen_fsm
,只有在使用 100% 符合 gen_fsm 模型时才有用。所以必须有一个简单而清晰的有限状态机来解决你的问题。请注意,通常 FSM 的状态计数在面对现实世界时往往会爆炸。
gen_fsm
如果您发现自己在's变量中有很多次要状态信息,那么State
可能是时候切换到's 状态gen_server
并将其添加到变量中了。gen_fsm
State
一般有疑问时:使用gen_server
gen_server
和的一个缺点gen_fsm
(通常情况更糟gen_fsm
)是您不能使用选择性接收。选择性接收是降低现实世界应用程序中状态机复杂性的重要工具。
为了同时具有选择性接收和 OTP 行为的优势,我建议使用plain_fsm。
于 2011-06-01T16:24:28.487 回答