这篇文章是我之前在RYTong内部分享的一篇文章,将简单介绍一下Ejabberd在启动时候的流程,以及启动过程中一些关键的逻辑。
PS:Ejabberd版本是2.1.11
启动入口
Ejabberd的启动函数是ejabberd:start/0方法,并最终调用ejabberd_app:start/2方法。这个方法实现了启动的主体逻辑,顺着该方法的源码逻辑就可以了解Ejabberd启动都做了些什么了。
start(normal, _Args) ->
ejabberd_loglevel:set(4),
write_pid_file(),
application:start(sasl),
randoms:start(),
db_init(),
sha:start(),
stringprep_sup:start_link(),
xml:start(),
start(),
translate:start(),
acl:start(),
ejabberd_ctl:init(),
ejabberd_commands:init(),
ejabberd_admin:start(),
gen_mod:start(),
ejabberd_config:start(),
ejabberd_check:config(),
connect_nodes(),
%% Loading ASN.1 driver explicitly to avoid races in LDAP