0

我正在使用 gen_mod 和 gen_fsm。gen_mod 处理所有 iq 请求,在一种情况下,我启动了 gen_fsm 并维护该模块。如果第一个用户发出 iq 请求并创建 gen_fsm 模块 pid 并且工作良好。但同时我已经发送了另一个 iq 由不同的用户,我从 gen_fsm 模块收到错误 {error,{already_started,<0.478.0>}。但有些人知道这是第一个用户 iq 为 gen_fsm 生成 pid 的原因,但第二个用户 iq 无法为该用户创建新 pid,因为该模块已经启动。我认为 gen_fsm 模块添加在主管下,因此每个用户都可以创建 pid对于 gen_fsm 模块,可以保持聊天。请让我知道这种方式正确还是有其他方式?

4

1 回答 1

2

听起来您正在gen_fsm使用注册名称启动每个进程。这意味着启动另一个将导致冲突并失败already_started,因为该名称已被使用。

如果您不使用注册名称,则可以在没有注册名称的情况下启动该过程。大概你的代码有这样的一行:

gen_fsm:start_link({local, ?SERVER}, my_module, [], [])

只需删除第一个参数:

gen_fsm:start_link(my_module, [], [])
于 2013-07-29T14:08:53.170 回答