0

我在 ejabberd 的 gen_mod 行为之后添加了一些模块来实现我的私有服务,并在这些模块中添加了一些钩子。这在大多数情况下都很好用。

  ejabberd_hooks:add(unset_presence_hook, Host,
    ?MODULE, unset_presence_hook, 10),

但是当我调用 ejabberdctl stop 时,ejabberd 执行以下代码,我发现 gen_mod:stop_modules()之前已经完成broadcast_c2s_shutdown(),ejabberd_c2s 中的一些钩子,例如“未设置存在钩子”,由于我的模块已关闭,无法执行。

prep_stop(State) ->
    ejabberd_listener:stop_listeners(),
    gen_mod:stop_modules(),
    ejabberd_admin:stop(),
    broadcast_c2s_shutdown(),
    timer:sleep(5000),
    State.

我想知道为什么ejabberd会在关闭c2s进程之前停止模块,或者这个设计的目的是什么?

4

0 回答 0