EMQ-esock啓動流程

esock啓動流程

最近研究了EMQ源碼,發現裏面採用最多的就是各種框架,如gen_server、supervisor監督機制,esock框架等,前段時間整理了一下esock使用啓動流程,今天分享一下。整理的不夠完善,請大家指正!

啓動方式: supervisor:start_child
啓動參數: supervisor/transient/infinity
啓動監督者
啓動connection
啓動方式: supervisor:start_child
啓動參數: supervisor/transient/infinity
此處唯一關聯爲 mfargs
異步創建一個進程
此處內部會有阻塞操作,等待go信號的到來
通知Sock可以接收數據
啓動accept
啓動方式: supervisor:start_child
啓動參數: supervisor/transient/infinity
異步調用
第三方accept請求,這裏連線表明在該模塊下發生
同步調用
大於最大連接數
小於最大連接數
使用apply動態調用conn時添加的emqttd_client模塊中的函數
判斷上述call調用的返回值
啓動listen
啓動方式: supervisor:start_child
啓動參數: worker/transient/16
小於
啓動方式: supervisor:start_child
啓動參數: worker/transient/5000
大於
esockd:open
esockd_sup:start_listener
esockd_listener_sup:start_link
Sup=supervisor:start_link
connection
esockd_connection_sup:start_link
gen_server:start_link
init
process_flag trap_exit, true
返回record記錄: max_clients/conn_opts/access_rules/shutdown/mfargs/logger
emqttd_client:start_link
proc_lib:spawn_link 異步很重要
init
Conn0:wait
do_init
run_socket
Conn:async_recv
gen_server2:enter_loop
loop: 循環接收數據及業務處理
accept
esockd_acceptor_sup:start_link
supervisor:start_link
init: esockd_acceptor, start_link
esockd_acceptor:start_link
gen_server:start_link
init
ap_server_init
返回記錄狀態: lsock/sockfun/tunefun/sockname/conn_sup/statsfun/logger
handle_cast
accept
prim_inet:async_accept,激活LSock句柄
handle_info
inet_db:lookup_socket 查詢LSock的加載模塊
inet_db:register_socket 註冊建聯的Sock
esockd_connection_sup:start_connection
gen_server:call
currclients
end
check_acl
esockd_connection:new 創建esockd_connection,該結構很重要
Conn:start_link
controlling_process 修改進程控制權限,後續數據發送在新的Sock上
Conn:go
listen
esockd_listener:start_link
gen_server:start_link
init
process_flag
esockd_transport:listen
AcceptNum
判斷
esockd_acceptor_sup:start_acceptor
supervisor:start_child
state: protocol/listen_on/options/lsock/laddress/LPort

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章