ejabberd源码分析《一》application启动

本文详细介绍了ejabberd XMPP服务器的启动过程,包括启动各组件和服务的顺序及功能,如日志初始化、数据库启动、权限控制等。

什么都别说,直接看启动函数

start(normal, _Args)

    %% ejabberd_logger主要是读取application的配置文件,然后启动lager,设置lager参数。

    ejabberd_logger:start(),

    %% 将本进程的pid写入配置文件指定的文件名中

    write_pid_file(),

    %% 新建jid ets

    jid:start(),

    %% 启动其它  app

    start_apps(),

    %% 查检ejabberd需要的module是否都有,如果没有,退出

    ejabberd:check_app(ejabberd),

    %% 空函数什么都没干

    randoms:start(),

    %% 启动mnesia

    db_init(),

    %% 启动ejabberd进程,进程loop为空

    start(),

    %% 读取*.msg中的条目,将英文信息与翻译后的信息存入translations的ets中,方便以后查询

    translate:start(),

    %% 创建两个ets用来存放命令

    ejabberd_ctl:init(),

    %% 新建ejabberd_commands的ets,然后插入两条命令

    ejabberd_commands:init(),

    %% 插入命令到ejabberd_commands的ets中

    ejabberd_admin:start(),

    %% 创建名为ejabberd_modules的ets

    gen_mod:start(),

    %%加入新的模块文件路径,注册几个查看模块的命令到ejabberd_commands

    ext_mod:start(),

    %% 读取配置文件,设置进程属性

    ejabberd_config:start(),

    set_settings_from_config(),

    acl:start(),

    shaper:start(),

    connect_nodes(),

    Sup = ejabberd_sup:start_link(),

    %% 连接其它结点

    ejabberd_rdbms:start(),

    ejabberd_riak_sup:start(),

    ejabberd_sm:start(),

    cyrsasl:start(),

    % Profiling %

    ejabberd_debug:eprof_start(),

    %

    ejabberd_debug:fprof_start(),

    maybe_add_nameservers(),

    ejabberd_auth:start(),

    ejabberd_oauth:start(),

    gen_mod:start_modules(),

    ejabberd_listener:start_listeners(),

    ?INFO_MSG("ejabberd ~s is started in the node ~p", [?VERSION, node()]), Sup;


%% 初始化数据库

db_init() ->

    ejabberd_config:env_binary_to_list(mnesia, dir),

    MyNode = node(),

    DbNodes = mnesia:system_info(db_nodes),

    %% 如果自己这个结点不是数据库结点中的一个报错

    case lists:member(MyNode, DbNodes) oftrue -> ok;false -> ?CRITICAL_MSG("Node name mismatch: I'm [~s],

    " "the database is owned by ~p", [MyNode, DbNodes]),

    ?CRITICAL_MSG("Either set ERLANG_NODE in ejabberdctl.cfg " "or change node name in Mnesia", []),

    erlang:error(node_name_mismatch) end,

    %% 第一个启动的mnesia结点,创建schema

    case mnesia:system_info(extra_db_nodes) of[] -> mnesia:create_schema([node()]);_ -> ok end,

    %% 启动mnesia

    ejabberd:start_app(mnesia, permanent),

    mnesia:wait_for_tables(mnesia:system_info(local_tables), infinity).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值