gen_fsm的唯一原子:Erlang中的start/3

gen_fsm的唯一原子:Erlang中的start/3,erlang,otp,gen-fsm,Erlang,Otp,Gen Fsm,我目前正在做一个游戏服务器的项目。每个玩家都应该有一个自己的gen_fsm行为流程。要使用start/3启动gen_fsm,我们需要一个唯一的atom,目前我们使用make_ref(),并找到了一种方法将此ref生成一个具有ref_To_list/1的atom。但据我所知,这是不推荐的,我同意他的看法 你将如何解决这个问题?当我们使用本地选项启动gen_fsm时,我们需要一个atom来识别它。如果您使用gen_fsm:start/3您需要的唯一atom是回调模块名称。这样,您只需跟踪PID(进程

我目前正在做一个游戏服务器的项目。每个玩家都应该有一个自己的gen_fsm行为流程。要使用start/3启动gen_fsm,我们需要一个唯一的atom,目前我们使用make_ref(),并找到了一种方法将此ref生成一个具有ref_To_list/1的atom。但据我所知,这是不推荐的,我同意他的看法


你将如何解决这个问题?当我们使用本地选项启动gen_fsm时,我们需要一个atom来识别它。

如果您使用
gen_fsm:start/3
您需要的唯一atom是回调模块名称。这样,您只需跟踪PID(进程ID),它将自动唯一


如果您以后需要访问
gen\u fsm
进程,请将PID保存在某种映射表中,或者按照您所做的那样命名该进程。

您应该看到gproc(https://github.com/esl/gproc)创建进程注册表以将某个erlang术语与进程的pid()关联。用唯一的atom注册每个已启动的gen_fsm进程不是一个好主意。

也许我遗漏了什么,但听起来最好的做法是不指定
local
选项,即不给gen_fsm进程命名


值得注意的是,erlang vm的实例可以使用以下方法。因此,生成大量随机原子可能是个坏主意。

谢谢,在使用gen\u fsm:send\u event/2时,我忽略了FsmRef也可以是Pid的事实,我想我需要一个原子。。。想想看,那没有任何意义。