ejabberd16.09源码分析(二) ejabberd启动详解

接上篇(ejabberd16.06源码分析(一) application启动)继续探索ejabberd启动的细节。
ejabberd_app.erl 中的start/2 :
start(normal, _Args) ->
    ejabberd_logger:start(),  %启动日志记录
    write_pid_file(),         %判断环境变量EJABBERD_PID_PATH是否存在,如果存在,

则将当前进程标识写到定义的文件中。否则什么都不做。
    jid:start(),              %创建jid的搜索模式, 存储在ets中,供后续使用
    start_apps(),             %启动其他的app,包括:sasl、ssl、fast_yaml、fast_tls、fast_xml、stringprep、cache_tab
start_elixir_application(),  %判断elixir配置是否使能, 使能则启动elixir,否则什么都不做。
    ejabberd:check_app(ejabberd),  %检查ejabberd需要的module是否都有,如果没有,则ejabberd退出。
    randoms:start(),               %启动生成随机数模块
    db_init(),                     %启动mnesia,并初始化。
    start(),                       %以spawn_link方式启动ejabberd进程。loop空循环
    translate:start(),             %从环境变量EJABBERD_MSGS_PATH定义的位置找*.msg并加载到ets:translations

表中(为了国际化)
    ejabberd_ctl:init(),           %创建两张ets表,ejabberd_ctl_cmds, ejabberd_ctl_host_cmds
    ejabberd_commands:init(),      %创建ets表, ejabberd_commands    
    ejabberd_admin:start(),        %注册常用的ejabberd commands
    gen_mod:start(),               %创建ets表,ejabberd_modules
    ext_mod:start(),   %增加ejabberd modules到code path中
setup_if_elixir_conf_used(),   %if elixir的配置被使用,则安装elixir,否则什么都不做。
    ejabberd_config:start(),       %获取环境变量EJABBERD_CONFIG_PATH的值,

读取该配置文件的内容, 生成ShareKey
    set_settings_from_config(),    %根据配置文件的内容, 设置log模块的level值,

并设置net_ticktime的值,默认为60秒。
    acl:start(),                   %创建存储acl的mnesia表, 并从配置文件中加载数据。
    shaper:start(),                %创建存储shaper的mnesia表, 并从配置文件中加载数据。
    connect_nodes(),               %从配置文件中读取cluster_nodes的配置, 并连接各节点。
    Sup = ejabberd_sup:start_link(), %建立监控进程
    ejabberd_rdbms:start(),          %从配置文件中读取sql相关配置, 然后开始该模块。
    ejabberd_riak_sup:start(),       %从配置文件中读取riak相关配置, 然后开始该模块。
    ejabberd_redis:start(),          %从配置文件中读取redis相关配置, 然后开始该模块。
    ejabberd_sm:start(),             %启动sm模块
    cyrsasl:start(),                 %启动cyrsasl模块
    maybe_add_nameservers(),         %如果ejabberd运作在Windows机器上, 获取nameservers并且增加到Erlang
    ejabberd_auth:start(),           %启动auth模块
    ejabberd_oauth:start(),          %启动oauth模块
    gen_mod:start_modules(),         %启动该host的所以modules
    ejabberd_listener:start_listeners(), %开始网络监听。
ejabberd_service:start(),        %创建ets表,delegated_namespaces和hooks_tmp
    register_elixir_config_hooks(),  %注册elixir config hooks
    Sup;    
在start函数中,调用一系列的方法和函数来完成整个应用的启动。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yongche_shi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值