1、ICE運行環境的唯一句柄Communicator對象,其用來管理ICE運行環境下所有對象資源,包含但不限於:
A、客戶端線程池,主要用來進行AMI方法的回調接口調用,防止環形調用產生的死鎖
B、服務器端的線程池,主要用來接收和處理客戶端的接口調用請求
C、ICE運行環境對應的屬性集合
D、對象工廠,主要用來根據實例化接口對象
E、日誌對象和統計對象,其實現日誌接口和統計接口用以實現ICE運行過程中的日誌記錄和網絡傳輸統計
F、缺省的路由器和定位器
G、插件管理對象,用來管理ICE運行環境下的插件對象
H、對象適配器ObjectAdapter,用以維護對象標示和服務對象之間的映射關係
2、Communicator對象的定義類似如下:
class CommunicatorI : public Communicator
{
public:
virtual void destroy(); // 銷燬通信器以及其所管理的ICE運行資源
virtual void shutdown(); // 關閉通信器,不再接收客戶端請求,但是正在執行的請求會執行完成
virtual void waitForShutdown(); // 等待當前通信器結束,意味着正在執行的所有請求都執行完畢
virtual bool isShutdown() const; // 判斷通信器是否已經關閉
virtual ObjectPrx stringToProxy(const std::string&) const; // 根據對象標示獲取對象的代理
virtual std::string proxyToString(const ObjectPrx&) const; // 根據對象代理獲取對象的標示
virtual ObjectPrx propertyToProxy(const std::string&) const; // 根據給定的屬性名稱找到對應值的代理對象
virtual PropertyDict proxyToProperty(const ObjectPrx&, const std::string&) const; // 返回代理對象的屬性集
virtual Identity stringToIdentity(const std::string&) const; // 將字符串標示轉換成唯一ID
virtual std::string identityToString(const Identity&) const; // 將唯一ID轉換成字符串
virtual ObjectAdapterPtr createObjectAdapter(const std::string&); // 通過名字創建對象適配器,端口在配置文件中配置(name.Endpoints)
virtual ObjectAdapterPtr createObjectAdapterWithEndpoints(const std::string&, const std::string&); //通過名稱和端口創建適配器
virtual ObjectAdapterPtr createObjectAdapterWithRouter(const std::string&, const RouterPrx&); // 通過名字和路由器來創建適配器
virtual PropertiesPtr getProperties() const; // 獲取通信器的屬性集合
virtual LoggerPtr getLogger() const; // 獲取日誌接口對象
virtual StatsPtr getStats() const; // 獲取統計接口對象
};
3、通信器Communicator的創建和初始化方法:
Ice::CommunicatorPtr ic = Ice::Initialize(argc, argv, initdata); // 通過命令行參數創建,會解析命令行中ICE相關屬性
Ice::CommunicatorPtr ic = Ice::Initialize(initdata); // 通過初始化對象創建
Ice::InitializationData initdata; // 構建初始化對象
initdata.properties = Ice::createProperties(args); // 設置初始化對象的屬性集合
initdata.logger = new MyLoggerI; // 設置對應的日誌接口
initdata.stats = new MyStatsI; // 設置對應的統計接口
4、對象適配器是ICE運行環境用來維護ASM的對象,管理ICE運行環境Activate Servant Map
每個對象適配器有一個和多個接入端點可以接入
每個對象適配器默認採用communicator的服務器線程進行消息處理,當然也可以通過指定<adapter-name>.ThreadPool.Size來指定自己的線程池
可以通過Communicator中如下的方法創建一個ObjectAdapter對象:
createObjectAdapter、createObjectAdapterWithEndpoints、createObjectAdapterWithRouter
Adapter對象提供了getName方法獲取對象名稱、getCommunicator方法獲取其所在的通信器對象
對象適配器是一個有狀態的對象,其包含狀態包括:Holding(初始狀態,不接收請求)、Active(激活狀態,正常處理)、Inactive(去激活狀態,對象即將銷燬)
對象適配器提供了一系列的API來管理其狀態轉換:activate、hold、deactivate、waitForHold、waitForDeactivate、destory
對象適配器均有一個地址與其對應,類似如:"tcp -h 10.0.0.1 -p 35840 -t 5000 -z:tcp -h 10.0.0.2 -p 35840 -t 5000 -z" (綁定兩個地址,超時5s,支持壓縮)
可以調用objectadapter的getEndpoints返回所綁定的地址信息
5、Servant對象時真正的接口服務對象,要想提供服務,需要將Servant對象加入到某一個objectAdapter中,並指定一個對象標示
virtual ObjectPrx add(const ObjectPtr&, const Identity&); // 指定ID添加對象,一般調用該方法
virtual ObjectPrx addWithUUID(const ObjectPtr&); // 自動生成對象標示來添加對象,僅僅臨時的服務對象調用該方法添加
virtual ObjectPtr remove(const Identity&); // 從objectadapter的ASM中移除一個服務對象
virtual ObjectPrx createProxy(const Identity&) const; // 創建servant對應的代理對象
virtual ObjectPrx createDirectProxy(const Identity&) const; // 創建servant的直接代理對象
virtual ObjectPrx createIndirectProxy(const Identity&) const; // 創建servant的間接代理對象
6、在生成的ICE接口方法代碼中,每個映射方法的後面都攜帶了一個current參數,Current的定義如下:
module Ice
{
local dictionary<string, string> Context;
enum OperationMode { Normal, \Idempotent };
local struct Current
{
ObjectAdapter adapter; // 服務器的對象適配器,可以通過它再調用getCommunicator得到通信器
Connection con; // 連接對象
Identity id; // 服務對象標示
string facet; //
string operation; // 操作的名稱
OperationMode mode; // 操作模式
Context ctx; // 操作上下文屬性
int requestId; // 請求ID
};
};
ICE運行時環境備忘一
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
ICE的AMI方法調用
followshake
2020-02-25 16:53:11
ICE的服務器對象實現
followshake
2020-02-25 16:53:10
slice的AMD方法實現與調用
followshake
2020-02-25 16:53:10
slice的c++映射
followshake
2020-02-25 16:53:10
ICE的屬性設置
followshake
2020-02-25 16:53:10
ice環境初始化和slice方法調用
followshake
2020-02-25 16:53:10
ICE的slice定義注意事項
followshake
2020-02-25 16:53:10
ICE運行環境備忘二
followshake
2020-02-25 16:53:10
ICE的AMI方法調用
followshake
2020-02-25 16:53:11
ICE的服務器對象實現
followshake
2020-02-25 16:53:10
slice的AMD方法實現與調用
followshake
2020-02-25 16:53:10
slice的c++映射
followshake
2020-02-25 16:53:10
ICE的屬性設置
followshake
2020-02-25 16:53:10
ICE的工具集基本功能
followshake
2020-02-25 16:53:10
ice環境初始化和slice方法調用
followshake
2020-02-25 16:53:10