EMQ源碼之--EMQ的啓動

又回到erlang了,使用了一段時間的golang再回到erlang有點那麼的親切感。在項目中也準備用mqtt來作消息上報,順道就想看下他的代碼。html

erlang中application都是經過supervisor來管理的,在emq中emqttd_sup是一個最大的supervisor,他下面面又鏈接了不少的supervisor或者worker。node

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會給你自動重啓。golang

相關文章
相關標籤/搜索