EMQ源码之--EMQ的启动
又回到erlang了,使用了一段时间的golang再回到erlang有点那么的亲切感。在项目中也准备用mqtt来做消息上报,顺道就想看下他的代码。
erlang中application都是通过supervisor来管理的,在emq中emqttd_sup是一个最大的supervisor,他下面面又连接了很多的supervisor或者worker。
ekka:start() emqttd_sup |-------->emqttd_ctl 负责从emqttd_ctl命令过来的rpc handler |-------->emqttd_hooks(hook 函数的处理) |-------->emqttd_router(各node之间的消息路由) |-------->emqttd_pubsub_sup(管理pubsub相关的supervisor) |-------->emqttd_pool_sup(emqttd_pubsub的supervisor)gproc_pool |----->emqttd_pubsub_1(worker) |----->emqttd_pubsub_2(worker) |-------->emqttd_pool_sup(emqttd_server的supervisor)gproc_pool |----->emqttd_server_1(worker) |----->emqttd_server_2(worker) |--------->emqttd_stats(stats topic相关的统计) |--------->emqttd_stats(metrics topic相关的统计) |--------->emqttd_pool_sup(pooler没看到哪里用到了这快)gproc_pool |------->pooler_1(worker) |------->pooler_2(worker) |--------->emqttd_sm_sup( session management supervisor)gproc_pool |------->emqttd_sm_1(worker) |------->emqttd_sm_2(worker) |--------->emqttd_ws_client_sup(websocket client supervisor)gproc_pool |------->emqttd_ws_client_1(worker) |------->emqttd_ws_client_2(worker) |--------->emqttd_broker(broker统计相关handler) |--------->emqttd_alarm(系统alerm相关的handler) |--------->emqttd_mod_sup(管理外部mod的supervisor) |--------->emqttd_bridge_sup_sup(bridge supervisor) |--------->emqttd_access_control(auth/acl相关管理模块) |--------->emqttd_sysmon_sup(system monitor supervisor) |-------->emqttd_sysmon(vm system monitor) register_acl_mod() start_listener()
之后就开始socket监听了,等待新的连接到来。
erlang的优势在于他又一套完善的process 监控系统。具体可以参考这里, 子进程退出后supervisor会给你自动重启。
相关推荐
瓜牛呱呱 2020-11-12
柳木木的IT 2020-11-04
yifouhu 2020-11-02
lei0 2020-11-02
源码zanqunet 2020-10-28
源码zanqunet 2020-10-26
一叶梧桐 2020-10-14
码代码的陈同学 2020-10-14
lukezhong 2020-10-14
lzzyok 2020-10-10
anchongnanzi 2020-09-21
clh0 2020-09-18
changcongying 2020-09-17
星辰大海的路上 2020-09-13
abfdada 2020-08-26
mzy000 2020-08-24
shenlanse 2020-08-18
zhujiangtaotaise 2020-08-18
xiemanR 2020-08-17