(4)ICE適配器帶來的好處

爲什麼需要適配器

在講解ice servant的章節中說到,服務端要想真正把服務提供給客戶,就要把ice servant和ice object聯繫起來,負責建立這種聯繫的東西就叫做ice適配器(adapter)。ice adapter和ice proxy從本質上講是一樣的,都是建立一箇中間層,把客戶和最終需求之間進行解耦,只不過稱呼不一樣。

作用

每個對象適配器都有一個或更多Ice服務員,負責服務Ice 對象;同時還有一個或更多傳輸端點。如果對象適配器擁有的傳輸端點不止一個,所有向該適配器註冊了的Ice服務員可以在任何一個端點(endpoint)上響應到來的請求。換句話說,如果對象適配器有多個傳輸端點,這些端點代表的是通往同一組對象的不同通信路徑(例如,通過不同的傳輸機制)。

通信框架圖

這裏寫圖片描述

實現原理

這裏寫圖片描述
每個對象適配器都維護有一個叫作活動servant映射表(active servantmap)的數據結構。 活動servant 映射表(簡稱爲ASM)是一個查找表,用於把對象標識映射到servant:在C++ 裏,查找值是智能指針,指向對應的servant 在內存中的位置;在Java 裏,查找值是指向servant 的Java 引用。
當客戶把操作調用發給服務器時,請求的目標是特定的傳輸端點。傳輸端點隱含地標識了請求所針對的對象適配器(因爲同一個端點只能綁定到一個對象適配器)。
客戶端發送請求的Ice代理含有對應的Ice對象的標識,客戶端run time會在發送請求的中帶上這個Ice對象標識。Ice適配器繼而使用這個對象標識,在它的ASM 中查找正確的servant,把發送請求分派給它進行服務。

適配器帶來的好處

使用適配器作爲服務端提供服務的最小單位,使得服務端在爲ice object提供服務的時候,把ice object和ice servant之間進行了解耦。也就是說當客戶端的請求接口不變,但是業務需求變化的情況下,服務端只需要通過ice adapter重新建立ice object和ice servant的關係就可以實現該功能。
舉個列子:有一家專門做交通工具租賃的公司,原來提供給客戶旅行的方式只有汽車,現在有一部分是飛機。你現在另一個地方新開了一家分店,專門用來進行飛機旅行的,用分佈式系統中的說法就是部署在新服務器上的servant不一樣。用代碼表示如下:

//ice對象
interface Traffic
{
    //給客戶提供旅行
    void travel();
};

//原有的ice servant
class OldTrafficI
{
    //原有的交通工具都是跑的
    void run();
}
adapter(Traffic,OldTrafficI);

//新加的ice servant
class NewTrafficI
{
    //新加的交通工具都是飛的
    void fly();
}
adapter(Traffic,NewTrafficI);

適配器和通信器的關係

每個對象適配器都只屬於一個通信器,但一個通信器可以有多個對象適配器。

發佈了31 篇原創文章 · 獲贊 5 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章