EMQ源码之--EMQ的启动
生活随笔
收集整理的這篇文章主要介紹了
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會給你自動重啟。
總結
以上是生活随笔為你收集整理的EMQ源码之--EMQ的启动的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用腾讯bugly更新服务遇到的坑
- 下一篇: 阿里云移动端播放器高级功能---安全播放