您的位置:首页 > 其它

ejabberd_iq_sup

2015-12-18 16:56 253 查看
ejabberd_iq_sup作为supervisor启动,子程序启动的模块为gen_iq_handler

gen_iq_handler:

根据配置参数iqdisc,可选项为no_queue, one_queue, {quques, N}和parallel

handle(Host, Module, Function, Opts, From, To, IQ) ->
case Opts of
no_queue ->
process_iq(Host, Module, Function, From, To, IQ);
{one_queue, Pid} ->
Pid ! {process_iq, From, To, IQ};
{queues, Pids} ->
Pid = lists:nth(erlang:phash(now(), length(Pids)), Pids),
Pid ! {process_iq, From, To, IQ};
parallel ->
spawn(?MODULE, process_iq,
[Host, Module, Function, From, To, IQ]);
_ -> todo
end.


View Code
gen_iq_handler的域分为 ejabberd_sm | ejabberd_local

-type component() :: ejabberd_sm | ejabberd_local.


意思为只向ejabberd_sm 、ejabberd_local注册

这样则主业务逻辑和模块分开,主业务逻辑只需调用gen_iq_handler提供的接口,所有的操作细节则有gen_iq_handler处理。

所以gen_iq_handler屏蔽了各个模块的差异
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: