如何在ejabberd中为每个用户iq请求创建gen_fsm的pid

时间:2013-07-29 10:44:24

标签: erlang ejabberd

我正在使用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模块,可以保持聊天。 请让我知道这种方式是正确的还是有其他方式?

1 个答案:

答案 0 :(得分:2)

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

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

already_started

只需删除第一个参数:

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