程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> ACE反響器(Reactor)形式的深刻剖析

ACE反響器(Reactor)形式的深刻剖析

編輯:關於C++

ACE反響器(Reactor)形式的深刻剖析。本站提示廣大學習愛好者:(ACE反響器(Reactor)形式的深刻剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是ACE反響器(Reactor)形式的深刻剖析正文


反響器(Reactor):用於事宜多路分別和分配的系統構造形式
平日的,對一個文件描寫符指定的文件或裝備, 有兩種任務方法: 壅塞與非壅塞。所謂壅塞方法的意思是指, 當試圖對該文件描寫符停止讀寫時, 假如其時沒有器械可讀,或許臨時弗成寫, 法式就進入期待狀況, 直到有器械可讀或許可寫為止。而關於非壅塞狀況, 假如沒有器械可讀, 或許弗成寫, 讀寫函數立時前往, 而不會期待。

在後面的章節中提到的Tcp通訊的例子中,就是采取的壅塞式的任務方法:當吸收tcp數據時,假如遠端沒稀有據可以讀,則會一向壅塞到讀到須要的數據為止。這類方法的傳輸和傳統的主動辦法的挪用相似,異常直不雅,而且簡略有用,然則異樣也存在一個效力成績,假如你是開辟一個面臨著數千個銜接的辦事器法式,對每個客戶端都采取壅塞的方法通訊,假如存在某個異常耗時的讀寫操作時,其它的客戶端通訊將沒法呼應,效力異常低下。
一種經常使用做法是:每樹立一個Socket銜接時,同時創立一個新線程對該Socket停止零丁通訊(采取壅塞的方法通訊)。這類方法具有很高的呼應速度,而且掌握起來也很簡略,在銜接數較少的時刻異常有用,然則假如對每個銜接都發生一個線程的無疑是對體系資本的一種糟蹋,假如銜接數較多將會湧現資本缺乏的情形。
另外一種較高效的做法是:辦事器端保留一個Socket銜接列表,然後對這個列表停止輪詢,假如發明某個Socket端口上稀有據可讀時(讀停當),則挪用該socket銜接的響應讀操作;假如發明某個Socket端口上稀有據可寫時(寫停當),則挪用該socket銜接的響應寫操作;假如某個端口的Socket銜接曾經中止,則挪用響應的析構辦法封閉該端口。如許能充足應用辦事器資本,效力獲得了很年夜進步。
在Socket編程中便可以經由過程select等相干API完成這一方法。但直接用這些API掌握起來比擬費事,而且也難以掌握和移植,在ACE中可以經由過程Reactor形式簡化這一開辟進程。

反響器實質上供給一組更高等的編程籠統,簡化了事宜驅動的散布式運用的設計和完成。除此而外,反響器還將若干分歧品種的事宜的多路分別集成到易於應用的API中。特殊地,反響器對基於准時器的事宜、旌旗燈號事宜、基於I/O端口監控的事宜和用戶界說的告訴停止同一地處置。

ACE中的反響器與若干外部和內部組件協同任務。其根本概念是反響器框架檢測事宜的產生(經由過程在OS事宜多路分別接口長進行偵聽),並收回對預掛號事宜處置器(event handler)對象中的辦法的"回調"(callback)。該辦法由運用開辟者完成,個中含有運用處置此事宜的特定代碼。
應用ACE的反響器,只需以下幾步:
創立事宜處置器,以處置他所感興致的某事宜。
在反響器上掛號,告訴說他有興致處置某事宜,同時傳遞他想要用以處置此事宜的事宜處置器的指針給反響器。
隨後反響器框架將主動地:
在外部保護一些表,將分歧的事宜類型與事宜處置器對象聯系關系起來。
在用戶已掛號的某個事宜產生時,反響器收回對處置器中響應辦法的回調。
反響器形式在ACE中被完成為ACE_Reactor類,它供給反響器框架的功效接口。
如下面所提到的,反響器將事宜處置器對象作為辦事供給者應用。反響器外部記載某個事宜處置器的特定事宜的相干回調辦法。當這些事宜產生時,反響器會創立這類事宜和響應的事宜處置器的聯系關系。
事宜處置器
事宜處置器就是須要經由過程輪詢產生事宜轉變的對象列表中的對象,如在下面的例子中就是銜接的客戶端,每一個客戶端都可以算作一個事宜處置器。
回調事宜
就是反響器支撐的事宜,如Socket讀停當,寫停當。拿下面的例子來講,假如某個客戶端(事宜處置器)在反響器中注冊了讀停當事宜,當客戶端給辦事器發送一條新聞的時刻,就會觸發這個客戶真個數據可讀的回調函數。
在反響器框架中,一切運用獨有的事宜處置器都必需由ACE_Event_Handler的籠統接口類派生。可以經由過程重載響應的"handle_"辦法完成相干的回調辦法。
應用ACE_Reactor根本上有三個步調:
創立ACE_Event_Handler的子類,並在個中完成恰當的"handle_"辦法,以處置你想要此事宜處置器為之辦事的事宜類型。
經由過程挪用反響器對象的register_handler(),將你的事宜處置器掛號到反響器。
在事宜產生時,反響器將主動回調響應的事宜處置器對象的恰當的handle_"辦法。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved