1.ejabberd監聽多個端口服務器
每一個網絡鏈接進來,ejabberd都會使用一個進程來負責這個鏈接的數據處理。原理跟Joe Armstrong的《Erlang程序設計》中的並行服務器同樣,就在P196,你們能夠看看。網絡
相比於Joe的例子,ejabberd的代碼更具備擴展性。在ejabberd_listener.erl文件中,start/3函數會根據要調用的模塊的socket_type來啓動相關的必備資源。在這個文件裏面,假設是tcp鏈接,調用過程是,start/3 -> start_dependent/3 -> init/3 -> init_tcp/6 -> accept/3 ,最後可能會調用ejabberd_frontend_socket或者ejabberd_socket裏面的start/4函數。frontend
在ejabberd_socket.erl文件中,仍是會根據要調用的模塊的socket_type來調用相關的函數。最後會調用模塊裏面的start/2函數,正常返回{ok, Pid}.一路看下來,參數中有端口,處理網絡鏈接的模塊名,鏈接時的選項。知道這些就能夠輕鬆配置網絡鏈接。socket
因此在處理網絡鏈接時,要監聽多個網絡端口,能夠考慮一下ejabberd_listener模塊。具體的代碼能夠參考mod_proxy65_stream.erl。tcp
2.在ejabberd的master庫中,本身寫的behavior模塊,behavior_info函數給註釋掉了,難道不須要導出behavior_info函數了嗎?這個特性是在何時開啓的?函數
轉貼請註明來自:格通spa