天天看點

ACE 的ACE_Acceptor類

       最近在看一個騰訊開源的架構, c++ 的, 網上的資料少之又少,開源word寫的那個,說實話按照word上都不如自行百度。折騰了兩天才跑起來了。

   在看代碼的過程中,對于 這個typedef ACE_Acceptor<ISGWIntf, ACE_SOCK_ACCEPTOR> ISGW_ACCEPTOR 可以說是ACE的一個很重要的類。是Acceptor參與者的實作體。

     Acceptor參與者位于網絡連接配接的服務端,它有兩個主要的功能,一是接收用戶端的連接配接,不同的網絡類型,其連接配接方式也不一樣;二是建立服務處理器,具體的服務處理器完全由應用程式來決定。為了解決上述兩個功能中的兩個變體——連接配接方式和服務處理器,ACE_Acceptor類使用了兩個模闆參數,如圖5-2所示。第一個參數用于定義應用程式的服務處理器類型,這樣一旦有連接配接請求,就可以使用工廠方法建立服務處理器對象;第二個參數用于網絡連接配接類型,在本書的分析中,它是ACE_SOCK_Acceptor,是Socket程式設計中accept函數的封裝器。解決了上述兩個變體後,還有一個問題需要解決,Acceptor參與者必須能夠處理網絡的連接配接事件。是以ACE将ACE_Acceptor類設計為ACE_Service_Object的子類,實際上它是ACE_Event_Handler的子類,這樣它就可以被Reactor架構排程,用來處理網絡連接配接事件了。

這裡面用到了設計模式,

降低了服務和連接配接建立方法之間的耦合,非常容易改動其中一個,而不影響另外一個,進而也就可以複用以前編寫的連接配接建立機制和服務例程的代碼。在同樣的例子中,使用這些模式的浏覽器程式員一開始可以構造他的系統、使用特定的連接配接建立機制來運作它和測試它;然後,如果先前的連接配接機制被證明不适合他所構造的系統,他可以決定說他希望将底層連接配接機制改變為多線程的(或許使用線程池政策)。因為此模式提供了嚴格的去耦合,隻需要極少的努力就可以實作這樣的變動。

ACE_Acceptor 工廠允許應用開發者改變“助手”對象,以用于:被動連接配接建立 連接配接建立後的處理