ace將網路程式設計進行了模式化,以便你不必每次都重複相同的**。
網路程式設計需要處理的事情多括中斷,併發,多執行緒等,程式格式相對固定,但是健壯的網路程式則相對複雜。為了處理這些情形,ace內建了幾個網路程式設計的模式。
最基本的模式當然是直接使用sock進行單客戶單伺服器單執行緒的一對一模型,這種模式相對簡單,也和ace關係不大,但是這樣編寫的程式不能處理併發的情況,可用性很差或者說基本不具有可用性。
最簡單的處理併發但是卻使用單執行緒的框架在ace中稱為reactor框架,在這種框架下,reactor扮演了協調員的角色,應用程式編制者需要首先寫好各種各樣的事件處理程式,然後在reactor中進行登記,reactor以阻塞的方式同時監視所有可能發生的事件,並且在相應的事件發生的時候呼叫對應的處理過程。這種框架解決了在單執行緒的前提下解決了併發,但是存在一定的問題,如果某個事件執行過程過長,則可能導致reactor漏過某些事件。
另外一種單執行緒處理併發的模式稱為非同步i/o的proactor模式,這種模式和前面介紹的reactor模式其實區別不大,唯一的區別之處在於,server類在對從網路上收到的訊息進行處理的時候,後者並不直接讓處理器處理收到的訊息,而是首先將訊息轉換為乙個訊息塊結構(ace_message_block,通過this->reader_.read函式),然後再讓相應的處理函式處理已經接收好的訊息塊結構。
比較一下reactor框架和proactor框架,前者的執行流程是: 監視事件->呼叫事件處理過程->繼續監視事件。 後者的執行流程是: 監視事件->產生訊息->處理訊息->釋放訊息->繼續監視事件。這兩種不同的框架在引入各自的多執行緒概念以後,就衍生出不同的多執行緒框架。
前面說過,使用多執行緒進行網路程式設計也有兩種框架,半同步/半非同步框架和領導者/跟隨者框架。前者對應的是proactor框架,後者對應的是reactor框架。所謂半同步或者半非同步框架,執行的流程是:主線程負責 監視事件->產生訊息->放入訊息佇列->監視事件,工作執行緒則負責從獲取訊息->處理訊息->從訊息佇列獲取另外乙個訊息。 這種框架的優勢在於,由於構造訊息並且將其放入訊息佇列的時間是可以控制的,因此,可以很好的處理網路峰值的情況,即使出現很高的峰值,也不會造成訊息的遺漏,但是由於訊息存在乙個入佇列,出佇列的過程,因此效能相較另外一種模型,理論上更差。
對於領導者/跟隨者模型中,必然存在乙個對等的執行緒池,執行緒池的數目取決於系統能夠承受的數目,單就對於模型本身來說,執行緒池的執行緒數目越大,能夠承受的網路蜂擁的極限值也越大。 但是如果執行每個請求的時間都很短,則系統中存在大量永遠也用不到的執行緒,浪費了系統的資源。
如果使用多處理器的系統,應用程式必然能夠從多執行緒(工作執行緒和跟隨者執行緒)結構中收益。
ACE網路程式設計筆記(1) ACE自適配通訊環境
介紹 好處增強可移植性 在ace元件的幫助下,很容易在一種os平台上編寫併發網路應用,然後快速地將它們移植到各種其他的os平台上。而且,因為ace是開放原始碼的自由軟體,你無需擔心被鎖定在特定的作業系統平台或編譯器上。更好的軟體質量 ace的設計使用了許多可提高軟體質量的關鍵模式,這些質量因素包括通...
C 網路程式設計 ACE相關資料收集
小飛驢的 馬維達 c 網路程式設計 卷二 譯者 cgi bin lb5000mx leoboard.cgi loveunix技術論壇 hxh 賀星河 的專欄 ace網路程式設計 ace自適配通訊環境討論 ace技術 集 一.ace自適配通訊環境 用於開發通訊軟體的物件導向網路程式設計工具包 ace程...
使用windows套接字進行網路程式設計
winsock通過提供基於標準可互操作性,使使程式設計師得以採用更高層次的協議和應用程式,比如ftp http rpc和com。winsock是在windows進行網路通訊程式設計的api介面,也是windws網路程式設計的事實標準。在網路程式設計中最常用的方案便是客戶機 伺服器模型。winsock...