10

查看 Gen_Fsm 和 Gen_Server 文档后,我发现它们或多或少具有相似的行为。在我看来,如果有一个循环函数用于发送广播或监听 tcp sock,最好使用 Gen_Fsm,否则使用 gen_server。我想知道它是否正确?

4

1 回答 1

9

您已经看对了,gen_server并且gen_fsm在功能上非常相似。

然而,在大多数程序中,gen_server不仅仅是gen_fsm使用。

在我看来gen_fsm,只有在使用 100% 符合 gen_fsm 模型时才有用。所以必须有一个简单而清晰的有限状态机来解决你的问题。请注意,通常 FSM 的状态计数在面对现实世界时往往会爆炸。

gen_fsm如果您发现自己在's变量中有很多次要状态信息,那么State可能是时候切换到's 状态gen_server并将其添加到变量中了。gen_fsmState

一般有疑问时:使用gen_server

gen_server和的一个缺点gen_fsm(通常情况更糟gen_fsm)是您不能使用选择性接收。选择性接收是降低现实世界应用程序中状态机复杂性的重要工具。

为了同时具有选择性接收和 OTP 行为的优势,我建议使用plain_fsm

于 2011-06-01T16:24:28.487 回答