連接src/rabbit.erl中的tcp偵聽器啟動項:
我們進入src/rabbit_networking.erl,在start/0函數中啟動tcp_client_sup監控樹。監控樹是simple_one_for_one,用來打開協議接收模塊(rabbit_reader)。簡單的_壹個_換壹個,壹個_換壹個,壹個_換所有的監控策略(還有壹個休息_換壹個)。以壹個簡單的項目為例。每個客戶端連接到服務器時,都會有壹個socket進程,這個進程會在連接關閉後消亡。當這個進程需要頻繁動態創建和銷毀時,就用simple _ one _ for _ one。當tcp_accept和tcp_listener相互配合,缺壹不可時,使用one_for_all。只要其中壹個進程掛起,監控樹下的所有進程都會重新啟動。如果其他模塊單獨工作且互不幹擾,則使用壹對壹策略。關於erlang監控策略。
在ebin/rabbit.app中,{TCP _ Listeners,[{"0.0.0 ",5672}]的IP端口是壹個列表,可以打開多個端口監聽套接字連接。Src/rabbit _ networking:在start _ tcp_listener中,啟動tcp_listener監聽進程,如圖:
這裏啟動了多個接受者進程(防止多個客戶端同時連接時出現阻塞)。當接收到套接字連接請求時,src/tcp_acceptor.erl模塊會生成壹個新的客戶端進程,並移交套接字的控制權(下面是src/rabbit_networking.erl代碼片段)。
套接字連接後,協議交互的邏輯處理在rabbit_tcp_client_sup模塊中按照自己的規則進行完善(該模塊默認)。
Prim_inet:async_accept/2函數用於src/TCP _ acceptor.erl中。
以上均為個人觀點。