【问题标题】:Unique atom for gen_fsm:start/3 in ErlangErlang 中 gen_fsm:start/3 的唯一原子
【发布时间】:2011-08-16 23:52:39
【问题描述】:
我目前正在做一个游戏服务器的项目。每个玩家都应该有自己的带有 gen_fsm 行为的进程。要使用 start/3 启动 gen_fsm,我们需要一个唯一的 atom,目前我们使用 make_ref() 并且已经找到了一种方法可以使用 ref_to_list/1 将此 ref 变成一个 atom。但根据this post 不建议这样做,我同意他的看法。
你会如何解决这个问题?当我们使用本地选项启动 gen_fsm 时,我们需要一个原子来识别它。
【问题讨论】:
标签:
erlang
erlang-otp
gen-fsm
【解决方案1】:
如果你使用gen_fsm:start/3,你唯一需要的就是回调模块名。这样你只需要跟踪一个 PID(进程 ID),它会自动唯一。
如果您稍后需要访问gen_fsm 进程,请将 PID 保存在某种映射表中或命名进程(如您所做的那样)。
【解决方案3】:
您应该看到 gproc (https://github.com/esl/gproc) 创建进程注册表,用于将一些 erlang 术语与进程的 pid() 关联。用唯一的 atom 注册每个启动的 gen_fsm 进程并不是一个好主意。