ejabberd16.09源码分析(二) ejabberd启动详解
来源:互联网 发布:金融投资网站源码 编辑:程序博客网 时间:2024/05/25 20:01
接上篇(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函数中,调用一系列的方法和函数来完成整个应用的启动。
- ejabberd16.09源码分析(二) ejabberd启动详解
- ejabberd16.06源码分析(一) application启动
- ejabberd源码分析《一》application启动
- ejabberd源码分析《一》application启动
- ejabberd源码分析《二》客户端网络监听
- ejabberd分析(三)启动流程
- ejabberd分析(二) 用户注册
- ejabberd分析(二) 用户注册
- Ejabberd源码学习——启动流程
- dataserver 源码分析(二) 启动服务
- distribution源码分析(二):registry启动
- kubelet启动pod源码分析(二)
- ejabberd源码分析《三》客户端数据处理
- Activity启动流程源码分析之Launcher启动(二)
- centos下源码安装ejabberd16.04
- Nginx源码分析-启动初始化过程(二)
- Nginx源码分析-启动初始化过程(二)
- tomcat源码分析(二)启动---Debug方式
- MyEclipse中MAVEN环境的配置
- css添加修改样式
- 将项目导入eclipse需要注意的事项
- Spring注解@Component、@Repository、@Service、@Controller区别
- 关于家用NAS选购硬盘的分享
- ejabberd16.09源码分析(二) ejabberd启动详解
- iOS应用架构谈 view层
- 从零开始学习音视频编程技术(十五) YUV420P转RGB32
- 详解sockaddr_ll 设备无关的物理层地址结构
- 球面UV坐标
- Android 开发实践 Lambda表达式的使用
- iptables基础知识详解
- 从后台向前端传数据,一直不成功,使用session,数据一直不刷新
- 协程(二):协程的应用