2013-07-29 2 views
0

Я использую gen_mod и gen_fsm. gen_mod обрабатывает весь запрос iq, в одном случае я запускаю gen_fsm и поддерживаю этот модуль. если первый пользователь дает запрос iq и создает модуль gen_fsm pid и работает хорошо. но между тем я отправляю другой iq другим пользователем, я получил ошибку от модуля gen_fsm {error,{already_started,<0.478.0>}. но некоторые из них знают, что причиной является то, что первый пользователь iq генерировал pid для gen_fsm, но второй пользователь iq не смог создать новый pid для этого пользователя, потому что уже этот модуль запущен. Я думаю, что модуль gen_fsm добавит под супервизором, поэтому каждый пользователь может создать pid для модуля gen_fsm и может поддерживать чат. , пожалуйста, дайте мне знать, так ли это правильно или есть какой-то другой способ?Как создать pid для gen_fsm каждым пользователем iq запрос в ejabberd

ответ

2

Кажется, что вы начинаете каждый gen_fsm процесс с зарегистрированным именем. Это означает, что запуск другого приведет к столкновению и сбою с already_started, так как это имя уже выполнено.

Если вы не используете зарегистрированное имя, вы можете запустить процесс без него. Предположительно ваш код имеет следующую строку:

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

Просто удалите первый аргумент:

gen_fsm:start_link(my_module, [], []) 
Смежные вопросы