ICE第三篇------一些疑难点
1 間接代理
參考http://blog.sina.com.cn/s/blog_53e8499c0100lkoo.html
IceGrid用于支持分布式網絡服務應用,一個IceGrid域由一個注冊表(Registry)和任何數目的節點(Node)構成。注冊表(Registry)和節點(Node)一起合作管理一些信息以及包含一些應用(Application)的服務進程。每項應用(Application)被指定在特定節點上的服務。這個注冊表(Registry)持久記錄了這些信息,而節點(Node)負責啟動和監測其指定的服務器進程。對于一個典型的配置,一個節點(Node)運行在一臺計算機(稱之為Ice服務器主機)。注冊表(Registry)并不消耗很多處理器時間,所以它常常是和一個節點(Node)運行在同一臺計算機上的,注冊表(Registry)還可以和一個節點(Node)可以運行在同一進程中.如果需要容錯,注冊表(Registry)還可以用主從式的設計支持復制(Replication)。
注冊表(Registry)的主要責任,是解決作為Ice定位服務的間接代理問題,當客戶端第一次嘗試使用一種間接代理,客戶端Ice run time首先連接注冊表(registry),注冊表將間接代理的符號信息轉化為直接代理的endpoint,然后客戶端和直接代理建立一個連接。通過適配器復制,同名適配器可以分布在多個節點上,間接代理可以映射到多個節點上的直接代理,在運行時由注冊表服務根據負載均衡自動選擇一個直接代理給客戶端。
使用間接代理時,客戶端可以用以下方式直接獲取服務對象代理:
MyProxy=theObject@theAdapter??//?對象@適配器
更簡單一點的話可以用以下方式
MyProxy=theObject??//?對象
2.6.1?分布式部署
在部署IceGrid分布式服務時,需要啟動注冊表服務(icegridregistry),并配置注冊表服務地址端口、通信協議和注冊信息保存的目錄地址(ICE的注冊信息保存為BerkeleyDB的數據庫文件):
IceGrid.Registry.Client.Endpoints=tcp-p 4061
IceGrid.Registry.Data=/opt/ripper/registry
?
在服務器節點中和客戶端都需要配置注冊表服務的地址端口和通信協議:
Ice.Default.Locator=IceGrid/Locator:tcp -h 172.0.0.1 -p4061
參考這個位置http://blog.chaoskey.com/2008/04/24/10
Ice::ObjectPrx?proxy?=????communicator?>stringToProxy("factory@EncoderAdapter");
Ripper::MP3EncoderFactoryPrx?factory?=
????Ripper::MP3EncoderFactoryPrx::checkedCast(proxy);
Ripper::MP3EncoderPrx?encoder?=?factory?>createEncoder(); 注意:客戶端使用一個MP3EncoderFactory對象的間接代理。這個字符串代理從字面上來看,是"標識為EncoderAdapter的對象適配器中的一個標識為factory的對象". 這個編碼服務器創建這個對象適配器,并確保對象適配器使用此標識符。由于每個對象適配器被唯一標識,注冊器(Registry)可以很容易確定的服務器創造了適配器和返回一個適當的Endpoint給客戶端. 這個客戶端調用 checkedCast 是在這個factory對象上的第一個遠程調用,因此,這個定位請求在這個調用過程中被執行。隨后調用 createEncoder 是直接發送給服務器而沒有IceGrid的進一步參與.
轉載于:https://www.cnblogs.com/catkins/p/5270621.html
總結
以上是生活随笔為你收集整理的ICE第三篇------一些疑难点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows bat 批处理 !vm
- 下一篇: rematch:当你受不了redux繁琐