ZeroC ICE的远程调用框架 代理引用地址
在官方文檔中稱為Binding,協(xié)議-地址對的綁定。
在Proxy模式中,一般地有三個參與者,Proxy,Subject以及RealSubject。Subject定義了Proxy(代理)和RealSubject(實體)的公
共接口,Proxy包含一個對RealSubject的引用,客戶通過調(diào)用Proxy,由Proxy通過引用對RealSubject進行調(diào)用。一般地這個引用是一
個本地RealSubject的指針,而在Remote Proxy模式中這個引用通常包含RealSubject所在的主機位置等,可以對RealSubject進行定位
的信息。而在Ice中,::IceProxy::Ice::Object與Reference正是Proxy代理和遠端對象的引用的角色。
地址,我們通常用來指一個主機所在的網(wǎng)絡位置,終端地址或者連接地址,它只提供了代理引用的"對象"(Ice Object并不是指存在于
遠端的實例)所在的主機位置。但你的請求最終是要到達"對象"執(zhí)行調(diào)用(invoaction)的位置,只依靠網(wǎng)絡地址仍然不能將你的調(diào)用
傳達到執(zhí)行點,所以你必須通過Identity等的協(xié)議信息,由"對象"所在主機的ObjectAdapter為你的調(diào)用請求適配到"對象"的執(zhí)行調(diào)用
的位置,即Servant。引用中的協(xié)議描述包含了六個屬性,其中的Identity和Facet是ObjectAdapter用來對Servant的定位。這六個屬性
在每次請求時都要寫在請求消息胡辣湯,請求消息經(jīng)網(wǎng)絡連接到達主機后,由Ice環(huán)境從請求消息頭獲取出代理引用的協(xié)議信息,然后
委托給ObjectAdapter進行適配定位。這就好比兩次尋址,當你的本地指針(虛擬空間地址),CPU的MMU單元在對指針尋址(定位)的
時候,首先要訪問頁面映射表,映射成物理頁面位置,然后再根據(jù)頁內(nèi)偏移在物理內(nèi)存頁面內(nèi)進行定位。我們的通過網(wǎng)絡地址將消息送
達到主機,主機的協(xié)議棧根據(jù)端口遞交到目標服務器(進程),而我們的請求最終在服務器(進程)何處執(zhí)行,必須依靠服務器程序為
我們提供的ObjectAdapter服務,通過代理引用的協(xié)議信息進行定位。
代理和引用不單獨存在,創(chuàng)建一個代理代理時同時會創(chuàng)建一個引用。但引用并不依賴于連接而存在。就像本地代理一樣,每次使用本地
代理進行調(diào)用時,代理在通過引用進行實體的調(diào)用時,CPU都會對引用 (本地指針)進行內(nèi)存尋址。一個對象實例的指針的生命期與這
個對象實例的生命期無關。我們的代理引用地址,協(xié)議-地址對,網(wǎng)絡地址好比CPU虛擬空間地址高位的頁面段,協(xié)議信息好比CPU虛擬
空間地址低位的頁內(nèi)偏移量。CPU在尋址時首先會去Cache中進行頁面命中,從而省略一次頁面尋址過程。同樣我們的在使用Ice代理引
用時,引用會先檢查是否存在既有連接,而省略一次連接創(chuàng)建。連接本身對于引用的關聯(lián)性不大,但與一次調(diào)用緊密關聯(lián)著。特殊地我
們的使用代理引用的每次調(diào)用都由一條獨立的連接完成。
代理引用的協(xié)議信息充斥在整個調(diào)用過程的每一處,首先調(diào)用請求方的代理將引用中保存的協(xié)議信息,寫在請求消息頭。在調(diào)用執(zhí)行方
的遠端程序接收到請求后將協(xié)議信息從請求消息頭中讀出,保存在一個Current的本地對象中,Current在遠端調(diào)用調(diào)度整個過程中以函
數(shù)參數(shù)方法傳遞,最后將Current保存的協(xié)議信息寫到響應消息頭,發(fā)回給調(diào)用請求方。
網(wǎng)絡地址分為兩類,一類是直接地址,另一類是間接地址必須借助Locator服務。
代理引用的持久化,就是將代理引用通過字符串的描述保存。
?
代理引用地址的字符串描述:
描述分兩部分,前部分為代理描述,后部分為對象適配器地址描述。
代理描述部分主要描述代理的六個主要屬性ident, facet, mode, secure, protocol, encoding。以ident屬性開頭,其余屬性分別以
選項方式表述,
-f <facet>
-t|o|O|d|D 表示twoway,oneway,batchoneway,datagram,batchdatagram
-s 表示安全屬性為true
-p <Num> 表示協(xié)議版本號
-encoding 1.<0|1> 表示非內(nèi)嵌類型的編碼算法版本號
地址描述部分描述對象適配器地址,分兩種表述方式。
直接地址,每個直接地址以":"開頭,可以表述多個地址
-h <hostname|address>
-p <port>
-t <timeout>
對象適配器名稱,以"@"開頭的字符串,只可以表述一次,不能與直接地址表述同時使用。
轉載于:https://www.cnblogs.com/bbqzsl/p/6647687.html
總結
以上是生活随笔為你收集整理的ZeroC ICE的远程调用框架 代理引用地址的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win10系列:JavaScript 的
- 下一篇: T1683 车厢重组 codevs