《面向模式的軟體體繫結構2-用於並發和網路化對象模式》讀書筆記(10)— 接受器 – 連接器

來源:互聯網
上載者:User

3.4接受器 - 連接器(Acceptor - Connector)

1.問題

      在連線導向的網路化系統中,應用程式通常包含相當大量的用於建立串連和初始化服務的配置代理。這些配置代碼大多獨立於服務對在串連傳輸端點之間交換的資料所進行的處理。因此配置代碼與服務處理代碼之間緊密耦合是不理想的,因為這樣不能解決以下四個強制條件:

      1)它應該很容易地改變串連角色,以支援不同的應用特徵。

      2)應很容易地增加服務,服務實現和通訊協定的種類,而不影響已有的串連建立和服務初始化配置代碼。

      3)串連建立和服務初始化策略的改變要比應用程式實現的通訊協定和服務的改變頻率少。

      4)對大規模網路化系統,應能通過使用進階的作業系統特性,如非同步串連機制來降低串連建立延遲。

 

2.解決方案

      將網路化應用中對等體服務的串連和初始化工作,與串連和初始化後這些服務所執行的處理分開。

      具體地說:在對等體服務處理常式中封裝應用服務。每個服務處理常式實現網路化應用中端到端的一半服務。使用兩個工廠串連和初始化對等體服務:接受器和連接器。這兩個工廠相互合作,建立在兩個對等體服務處理常式與它們的兩個串連的傳輸端點之間的全關聯,每個傳輸端點封裝在一個傳輸控制代碼中。

      接受器工廠代表相關的對等體服務處理常式,在由遠程對等體服務處理常式發出的串連請求事件到達後被動地建立串連。反過來,連接器工廠代表對等體服務處理常式主動地與指定的遠程對等體服務處理常式建立串連。

      串連建立後,接受器和連接器工廠初始化相應的對等體服務處理常式,向它們傳送各自的傳輸控制代碼。然後對等體服務處理常式使用傳輸控制代碼通過串連的傳輸端點交換資料,進行與應用有關的處理。一般來說,在串連和初始化後,服務處理常式並不與接受器和發送器互動。

 

3.結構

      被動模式的傳輸端點是一個工廠,它偵聽串連請求,接受串連請求和建立傳輸控制代碼,傳輸控制代碼中封裝了新串連的傳輸端點。可以通過串連的傳輸端點讀寫相應的傳輸控制代碼來交換資料。

       

 

      服務處理常式定義了網路系統中端到端的一半服務。在這個端到端的服務中一個具體的服務處理常式通常既具有客戶機角色又具有伺服器角色。在對等使用的情況下,它可以同時扮演這兩個角色。一個服務處理常式提供了一個啟用鉤子方法,用於在串連到其對等體的服務處理常式後進行初始化。另外,服務處理常式還包括一個封閉傳輸端點的傳輸控制代碼,如資料模式通訊端控制代碼。一旦串連上,服務處理常式就使用傳輸控制代碼與對等體服務處理常式通過它們的串連傳輸端點交換資料。

       

 

      接受器是一個工廠,它實現的功能包括被動地建立被串連的傳輸端點,建立和初始化相關的傳輸控制代碼和服務處理常式。一個接受器提供兩個方法:串連初始化和串連完成,這兩個方法在被動模式傳輸端點的協助下實現上述功能。

      調用初始化方法時,接受器將被動模式傳輸端點綁定到一個傳輸地址上,如一個TCP連接埠號碼和IP主機地址,它被動地偵聽串連請求。

      當串連請求到達時,接受器的串連完成方法執行下面3個步驟:

      ·首先,它用被動模式傳輸端點建立一個串連的傳輸端點,並在傳輸控制代碼中封裝該端點。

      ·第二,它建立一個服務處理常式,用於處理對等體服務處理常式通過串連的傳輸端點發出的資料請求。

      ·第三,它將傳輸控制代碼儲存在相應的服務處理常式中,然後調用服務處理常式的啟用鉤子方法,該方法讓服務處理常式自己完成初始化。

 

      連接器也是一個工廠,它實現的功能包括主動地建立串連的傳輸端點,初始化其相應的傳輸控制代碼和服務處理常式。它提供2個方法:串連啟動和串連完成方法。

      向串連啟動方法傳給一個已有的服務處理常式,該方法為它和接受器建立一個串連的傳輸端點。正如前面介紹的,該接受器一定正在偵聽在某一傳輸地址上的串連請求。

      將連接器的串連啟動方法和完成方法分開,這樣可以使連接器支援透明的同步和非同步串連建立。

      ·對於同步的情況,啟用串連請求的連接器阻塞其調用者,直到傳輸端點被串連上。以後,連接器直接調用服務處理常式的啟用鉤子方法。

      ·對於非同步情況,非同步運行串連請求,連接器的啟用方法立即返回。只有在連接器得到傳輸端點已非同步地完成了串連的通知後,串連完成方法才啟用服務處理常式。

       

      無論是同步還是非同步地串連傳輸端點的,在串連上傳輸端點事,接受器和連接器都通過調用其啟用鉤子方法來初始化一個服務處理常式。以後,服務處理常式一般不需要與連接器和接受器工廠互動。

 

      分配器負責多路分解表示不同類型服務要求(如串連請求和資料請求)的指示事件。

     

      ·對於接受器,分配器多路分解從封裝傳輸端點的一個或多個傳輸控制代碼中接收來的串連指示事件。多個接受器可以註冊同一個分配器,分配器替它們偵聽來自於對等體連接器的串連請求。

      ·對於連接器,分配器多路分解因響應非同步啟用的串連而到達的完成事件。為了處理這種情況,連接器向一個分配器註冊它自己,以接收這些串連完成事件,然後分配器運行它的事件迴圈。當完成事件到達時,它通知相應的連接器。然後連接器調用指定的服務處理常式的啟用鉤子方法,讓服務處理常式來初始化自己。因此,一個分配器和連接器可以代表多個服務處理常式非同步地啟用和完成串連。

            注意,非同步串連建立不需要使用分配器,因為啟動串連的線程會因等待串連完成事件而阻塞。因此,該線程可以直接啟用服務處理常式。

 

      具體的服務處理常式定義與應用有關的部分端到端服務,由具體接受器或具體連接器啟用這部分服務。具體接受器用具體服務處理常式。傳輸端點和這些服務處理常式使用的傳輸控制代碼來執行個體化通用接受器。類似地,具體連接器也執行個體化通用連接器。

 

4.實現

      接受器 - 連接器模式中的各組成部分可以分解成以下三層:

      ·多路分解/分配基礎設施層組件。該層執行通用的與應用無關的事件分配策略。

      ·串連管理層組件。該層執行通用的與應用無關的串連和初始化服務。

      ·應用程式層組件。該層對上兩層的通用策略進行定製,它使用了子類派生,對象組合和/或參數化型別的執行個體化等方法,以建立具體組件這些具體組件用於建立串連,交換資料和執行與服務有關的處理。

 

1)實現多路分解/分配基礎設施組件層。

      1.1)選擇傳輸機制,這些機制包括:

            ·被動模式傳輸端點組件。

            ·串連的傳輸端點組件。

            ·傳輸地址組件。

            ·傳輸控制代碼組件。

      1.2)實現分配機制。這些機制由分配器和事件處理常式組件組成。分配器負責將請求與對應的接受器,連接器和服務處理常式聯絡起來。事件處理常式定義了由事件驅動的應用程式中服務所提供的事件處理介面。

2)實現串連管理組件層。本層負責建立服務處理常式,主動或被動地將服務處理常式串連到遠程服務處理常式上,以及在串連後啟用服務處理常式。這一層的所有組件都是通用的,並依賴於具體的IPC機制,具體的服務處理常式,具體的接受器和具體的連接器。在串連管理層中有三個主要的組件:服務處理常式,接受器和連接器。

      2.1)定義通用的服務處理常式介面。服務處理常式提供了一個通用的介面,它是由客戶機,伺服器或者在端到端的服務中兩者(客戶機和伺服器)共同定義的服務。該介面包括初始化服務處理常式,執行它定義的服務以及維護用於通訊的IPC機制等方法。

      2.2)定義一個通用的接受器介面。接受器組件中實現一個通用的策略,該策略用於被動地建立串連,建立的初始化具體的服務處理常式,這些具體的服務處理常式利用這些串連與對等體服務處理常式交換資料。接受器中也定義一個初始化方法,供應用程式調用這個方法,用於向網路中其他應用程式通告它的被動模式傳輸端點。

      2.3)實現通用的接受器方法。應用程式通過調用其初始化方法來初始化接受器。調用初始化方法時要有一個指明傳輸地址(如本地主機IP名和TCP連接埠號碼)的參數。接受器使用這個地址參數偵聽對等體連接器啟動的串連請求。它通過接受器的具體接受器子類或通過類型化參數將這個地址傳遞給配置到通用接受器中的具體IPC串連機制。然後IPC串連機制就初始化接受器的被動模式傳輸端點,將它的地址告知要與該接受器建立串連的遠程應用程式。

      2.4)定義通用的連接器介面。連接器組件實現了用於主動建立串連和初始化服務處理常式的通用策略,這些服務處理常式負責處理串連上的請求和響應事件。

      2.5)實現通用連接器方法。應用程式用連接器的connect()方法來啟動一個串連,具體連接器可以使用該模板方法,在不改變連接器介面和實現的情況下透明地修改主動串連策略。因此,connect()將其串連策略中的具體步驟交給鉤子方法去完成,具體連接器可以重載這些鉤子方法以進行個人化的操作。

3)實現應用程式層的組件。本層實現具體服務處理常式,具體接受器和具體連接器。 

 

5.結論

優點:

      1)可重用性,可移植性和可擴充性。接受器 - 連接器模式將串連和初始化服務處理常式的機制與在此之後進行的服務處理分開。接受器和連接器中與應用無關的機制是可重用的組件。

      2)健壯性。接受器 - 連接器模式將服務處理常式與接受器分開。這種分離能確保被動模式傳輸端點不能用於讀/寫資料。這種增加了型別安全,能消除使用弱類型的網路編程介面時經常會出現的一類錯誤。

      3)高效性。接受器 - 連接器模式可以在延遲很大的廣域網路中非同步地和高效地與大量主機主動地建立串連。

 

不足:

      1)增加了間接性。與直接使用底層的網路編程介面相比,接受器 - 連接器模式是不直接的。

      2)增加了複雜性。對於只串連到一個伺服器,使用單一網路編程介面執行一個服務的簡單客戶機應用程式,接受器 - 連接器模式增加了不必要的複雜性。不過使用通用的接受器和連接器封裝器外觀可以使開發人員不用考慮令人厭煩的,易出錯的和不可移植的低層網路編程機制,從而簡化了應用程式的設計。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.