何时使用Gen_Fsm以及何时使用Gen_Server?

why*_*why 10 erlang gen-server gen-fsm

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

Pee*_*ger 9

您已经看到了正确的功能gen_server并且gen_fsm非常相似.

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

在我看来gen_fsm,仅当使用100%符合gen_fsm模型时才有用.因此,必须有一个简单明了的有限状态机,适合您的问题.请注意,通常FSM的状态计数往往会在现实世界中爆炸.

如果你发现自己有很多在二次状态信息gen_fsmState变量它可能是时间切换到gen_server添加gen_fsm的状态的State变量.

一般在有疑问时:使用 gen_server

两者的缺点gen_servergen_fsm(所出糟糕的gen_fsm通常情况下)是你不能使用选择性接收.选择性接收是降低现实世界应用中状态机复杂性的重要工具.

为了获得选择性接收和OTP行为的优势,我建议使用plain_fsm.