在检查了Gen_Fsm和Gen_Server文档之后,我发现它们或多或少地表现出相似的行为。我认为,如果有一个循环函数用于发送广播或监听tcp socks ,则最好使用Gen_Fsm,否则最好使用gen_server。我想知道这是否对吗?
最佳答案
您已经正确地看到gen_server
和gen_fsm
在功能上非常相似。
但是,在大多数程序中,gen_server
比gen_fsm
的用法要多得多。
我认为gen_fsm
仅在用法100%符合gen_fsm模型时才有用。因此,必须有一个适合您问题的简单明了的有限状态机。请注意,通常FSM的状态数在面对现实世界时会爆炸。
如果您发现自己在gen_fsm
的State
变量中有很多辅助状态信息,则可能是时候切换到gen_server
并将gen_fsm
的状态添加到State
变量中了。
通常在有疑问时:使用gen_server
gen_server
和gen_fsm
的一个缺点(通常在gen_fsm
中更糟糕)是不能使用选择性接收。选择性接收是降低现实应用中状态机复杂性的重要工具。
为了同时具有选择性接收和OTP行为的优势,我建议plain_fsm。
关于erlang - 何时使用Gen_Fsm以及何时使用Gen_Server?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6201222/