靈魂-放水

          為學(xué)日益,為道日損。

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            296 Posts :: 10 Stories :: 274 Comments :: 0 Trackbacks
          (RPC:Remote Procedure Call protocol)

            遠(yuǎn)程過程調(diào)用(RPC)是一種通過網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請(qǐng)求服務(wù),而不需要了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議。RPC 協(xié)議假定某些傳輸協(xié)議的存在,如 TCP 或 UDP,為通信程序之間攜帶信息數(shù)據(jù)。在 OSI 網(wǎng)絡(luò)通信模型中,RPC 跨越了傳輸層和應(yīng)用層。RPC 使得開發(fā)包括網(wǎng)絡(luò)分布式多程序在內(nèi)的應(yīng)用程序更加容易。

            RPC 采用客戶機(jī)/服務(wù)器模式。請(qǐng)求程序就是一個(gè)客戶機(jī),而服務(wù)提供程序就是一個(gè)服務(wù)器。首先,調(diào)用進(jìn)程發(fā)送一個(gè)有進(jìn)程參數(shù)的調(diào)用信息到服務(wù)進(jìn)程,然后等待應(yīng)答信息。在服務(wù)器端,進(jìn)程保持睡眠狀態(tài)直到調(diào)用信息的到達(dá)為止。當(dāng)一個(gè)調(diào)用信息到達(dá),服務(wù)器獲得進(jìn)程參數(shù),計(jì)算結(jié)果,發(fā)送答復(fù)信息,然后等待下一個(gè)調(diào)用信息,最后,客戶端調(diào)用過程接收答復(fù)信息,獲得進(jìn)程結(jié)果,然后調(diào)用執(zhí)行繼續(xù)進(jìn)行。

            目前,有多種 RPC 模式和執(zhí)行。最初由 Sun 公司提出。IETF ONC 憲章重新修訂了 Sun 版本,使得 ONC PRC 協(xié)議成為 IETF 標(biāo)準(zhǔn)協(xié)議。現(xiàn)在使用最普遍的模式和執(zhí)行是開放式軟件基礎(chǔ)的分布式計(jì)算環(huán)境(DCE)。


          協(xié)議結(jié)構(gòu)

            遠(yuǎn)程過程調(diào)用(RPC)信息協(xié)議由兩個(gè)不同結(jié)構(gòu)組成:調(diào)用信息和答復(fù)信息。信息流程如下所示:

          遠(yuǎn)程過程調(diào)用流程

          RPC:遠(yuǎn)程過程調(diào)用流程

            RPC 調(diào)用信息:每條遠(yuǎn)程過程調(diào)用信息包括以下無符號(hào)整數(shù)字段,以獨(dú)立識(shí)別遠(yuǎn)程過程:
          • 程序號(hào)(Program number)
          • 程序版本號(hào)(Program version number)
          • 過程號(hào)(Procedure number)

            RPC 調(diào)用信息主體形式如下:

            struct?call_body?{

             unsigned?int?rpcvers;

             unsigned?int?prog;

             unsigned?int?vers;

             unsigned?int?proc;

             opaque_auth?cred;

             opaque_auth?verf;

             1?parameter

             2?parameter?.?.?.?

            };

            RPC 答復(fù)信息:RPC 協(xié)議的答復(fù)信息的改變?nèi)Q于網(wǎng)絡(luò)服務(wù)器對(duì)調(diào)用信息是接收還是拒絕。答復(fù)信息請(qǐng)求包括區(qū)別以下情形的各種信息:
          • RPC 成功執(zhí)行調(diào)用信息。.
          • RPC 的遠(yuǎn)程實(shí)現(xiàn)不是協(xié)議第二版,返回 RPC 支持的最低和最高版本號(hào)。
          • 在遠(yuǎn)程系統(tǒng)中,遠(yuǎn)程程序不可用。
          • 遠(yuǎn)程程序不支持被請(qǐng)求的版本號(hào)。返回遠(yuǎn)程程序所支持的最低和最高版本號(hào)。
          • 請(qǐng)求的過程號(hào)不存在。通常是呼叫方協(xié)議或程序差錯(cuò)。

            RPC答復(fù)信息形式如下:

            enum?reply_stat?stat?{?

            MSG_ACCEPTED?=?0,

            MSG_DENIED???=?1

            };
          -----------------------------------------------------------------------------------------
          進(jìn)程間通信(IPC)是在多任務(wù)操作系統(tǒng)或聯(lián)網(wǎng)的計(jì)算機(jī)之間運(yùn)行的程序和進(jìn)程所用的通
          信技術(shù)。有兩種類型的進(jìn)程間通信(IPC)。

          □本地過程調(diào)用(LPC)LPC用在多任務(wù)操作系統(tǒng)中,使得同時(shí)運(yùn)行的任務(wù)能互相會(huì)話。
          這些任務(wù)共享內(nèi)存空間使任務(wù)同步和互相發(fā)送信息。

          □遠(yuǎn)程過程調(diào)用(RPC)RPC類似于LPC,只是在網(wǎng)上工作。RPC開始是出現(xiàn)在Sun微系統(tǒng)公
          司和HP公司的運(yùn)行UNIX操作系統(tǒng)的計(jì)算機(jī)中。

          通過IPC和RPC,程序能利用其它程序或計(jì)算機(jī)處理的進(jìn)程。客戶機(jī)/服務(wù)器模式計(jì)算把
          遠(yuǎn)程過程調(diào)用與其它技術(shù)如消息傳遞一道,作為系統(tǒng)間通信的一種機(jī)制。客戶機(jī)執(zhí)行自
          己的任務(wù),但靠服務(wù)器提供后端文件服務(wù)。RPC為客戶機(jī)提供向后端服務(wù)器申請(qǐng)服務(wù)的通
          信機(jī)制,如圖R-4所示。如果你把客戶機(jī)/服務(wù)器應(yīng)用程序想作是一個(gè)分離的程序,服
          務(wù)器能運(yùn)行數(shù)據(jù)訪問部分,因?yàn)樗x數(shù)據(jù)最近,客戶機(jī)能運(yùn)行數(shù)據(jù)表示和與用戶交互的
          前端部分。這樣,遠(yuǎn)程過程調(diào)用可看作是把分割的程序通過網(wǎng)絡(luò)重組的部件。LPC有時(shí)也
          稱耦合(Coupling)機(jī)制。

          用這種方式分割程序,當(dāng)用戶要訪問數(shù)據(jù)時(shí)就無需每次拷貝整個(gè)數(shù)據(jù)庫或它的大部分程
          序到用戶系統(tǒng)。其實(shí),服務(wù)器只處理請(qǐng)求,甚至只執(zhí)行一些數(shù)據(jù)計(jì)算,把得出的結(jié)果再
          發(fā)送給用戶。因?yàn)楫?dāng)數(shù)據(jù)存放在一個(gè)地方時(shí),數(shù)據(jù)庫同步很容易實(shí)現(xiàn),所以多個(gè)用戶可
          同時(shí)訪問相同的數(shù)據(jù)。

          分布式計(jì)算環(huán)境是由一個(gè)通信系統(tǒng)——網(wǎng)絡(luò)連接的計(jì)算機(jī)集群。很容易把這個(gè)網(wǎng)絡(luò)看成
          一個(gè)計(jì)算平臺(tái),若是對(duì)等方式,其中任何一臺(tái)計(jì)算機(jī)都能成為客戶機(jī)或服務(wù)器。一些處
          理任務(wù)可被分成獨(dú)立運(yùn)行程序在不同的網(wǎng)絡(luò)計(jì)算機(jī)上并行處理,而獨(dú)立的程序被交給最
          適合這個(gè)任務(wù)的計(jì)算機(jī)處理。這種策略可利用計(jì)算機(jī)空閑資源,提高網(wǎng)絡(luò)的效益。一個(gè)
          典型的企業(yè)網(wǎng)包括許多運(yùn)行著不同操作系統(tǒng)的異構(gòu)計(jì)算機(jī)系統(tǒng)。

          隨著企業(yè)網(wǎng)的產(chǎn)生,開發(fā)商必須編制可在各種計(jì)算機(jī)和網(wǎng)絡(luò)通信協(xié)議中都能運(yùn)行的程序
          。現(xiàn)在人們正努力使得遠(yuǎn)程過程調(diào)用獨(dú)立,這意味著開發(fā)商就不用考慮底層的網(wǎng)絡(luò)和網(wǎng)
          絡(luò)上數(shù)據(jù)傳輸所用的協(xié)議,下面介紹RPC在開放式軟件基金(OSF)的分布式計(jì)算環(huán)境(
          DCC)中實(shí)現(xiàn)的相關(guān)方法。RPC工作于多種分布式計(jì)算環(huán)境。

          SunSoft的開放網(wǎng)絡(luò)計(jì)算(ONC)的遠(yuǎn)過程調(diào)用/外部數(shù)據(jù)表示(RPC/XDR)協(xié)議被廣泛
          采用。在三百一十萬個(gè)運(yùn)行網(wǎng)絡(luò)文件系統(tǒng)(NFS)的系統(tǒng)中,有二百八十萬個(gè)使用ONCRP
          C庫,并在分布式應(yīng)用中作為客戶機(jī)或服務(wù)器。ONCRPC被IBM的所有操作系統(tǒng)所支持(除
          了OS/400)。UNIX系統(tǒng)實(shí)驗(yàn)室把RPC/XDR當(dāng)作是UNIX?System?V?Release?4的一個(gè)標(biāo)準(zhǔn)
          部分。Novell支持下一代ONC+傳輸自立遠(yuǎn)程過程調(diào)用(TI-RPC)技術(shù).TI-RPC?使用運(yùn)
          輸層接口(TLI)實(shí)現(xiàn)傳輸自立。TLI提供了一種訪問面向連接或非連接傳輸服務(wù)的通用
          方法(這在“STERAMS環(huán)境”中有所敘述)。

          Open?Software?Foundation(OSF)RPC?開放軟件基金會(huì)(OSF)的RPC

          RPC工具提供了一種編程語言和編譯器,它們使用可看作是本地過程的可運(yùn)行于客戶機(jī)和
          服務(wù)器上的模塊開發(fā)分布式應(yīng)用程序。運(yùn)行時(shí)設(shè)施(run-timefacility)使得分布式應(yīng)
          用程序能在多機(jī)種異構(gòu)系統(tǒng)上運(yùn)行,這樣使得底層體系結(jié)構(gòu)和運(yùn)輸協(xié)議對(duì)于應(yīng)用程序是
          透明的。

          程序員用接口定義語言(IDL)建立接口定義(interface?definition)。IDL是程序員
          用來設(shè)計(jì)遠(yuǎn)程運(yùn)行的過程的工具。IDL編譯器把IDL接口定義轉(zhuǎn)換成與客戶機(jī)和服務(wù)器相
          連的占位程序(stub)。客戶機(jī)上的占位程序可加入到服務(wù)器的過程,而服務(wù)器上的占
          位程序也可加入到客戶機(jī)過程。位于客戶機(jī)服務(wù)器的RPC運(yùn)行時(shí)設(shè)施與占位程序合作,來
          提供RPC操作。

          異構(gòu)環(huán)境中使用RPC的一個(gè)問題在于,不同的機(jī)器有不同的數(shù)據(jù)表示,OSFRPC通過具有調(diào)
          用機(jī)器的基本數(shù)據(jù)表示的特征調(diào)用來解決這個(gè)問題。當(dāng)收到調(diào)用時(shí),若根據(jù)特征知道兩
          臺(tái)機(jī)器數(shù)據(jù)表示不同的話,接收器就進(jìn)行數(shù)據(jù)轉(zhuǎn)換。

          RPC運(yùn)行時(shí)設(shè)施提供把客戶機(jī)請(qǐng)求傳送給服務(wù)器和在網(wǎng)上發(fā)送和接收響應(yīng)的功能。DCERP
          C運(yùn)行時(shí)設(shè)施也和網(wǎng)絡(luò)上其它DCE服務(wù)相互作用,這些DCE服務(wù)有命名、安全和定時(shí)服務(wù)。
          運(yùn)行時(shí)設(shè)施有下列特征:

          □可在多種網(wǎng)絡(luò)上運(yùn)行。開發(fā)者無需為每個(gè)網(wǎng)絡(luò)編寫特定的應(yīng)用程序。

          □提供客戶機(jī)或服務(wù)器或網(wǎng)絡(luò)上的故障恢復(fù)。它支持文件系統(tǒng)、數(shù)據(jù)庫和其它傳輸可變
          長(zhǎng)數(shù)據(jù)的服務(wù)。

          □提供獨(dú)立于任何一個(gè)目錄服務(wù)的基于名字定位服務(wù)器的方法。

          □提供安全工具的接口,以防RPC通信遭受破壞。安全服務(wù)保證機(jī)密信息的保密性和提供
          鑒別來保護(hù)通信完備性。

          □支持網(wǎng)上并發(fā)或并行處理的多線程調(diào)度,于是一個(gè)應(yīng)用程序就能同時(shí)執(zhí)行多個(gè)操作

          □提供多供應(yīng)商提供的系統(tǒng)環(huán)境的可移植性和相互操作性

          posted on 2006-11-03 19:25 放水老倌 閱讀(1301) 評(píng)論(0)  編輯  收藏 所屬分類: 標(biāo)準(zhǔn)

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 冀州市| 平江县| 吴堡县| 沧州市| 开鲁县| 奇台县| 长泰县| 麻城市| 石嘴山市| 宁晋县| 临颍县| 麻江县| 安多县| 新绛县| 呼伦贝尔市| 阳新县| 华阴市| 大关县| 东明县| 定陶县| 昌图县| 宕昌县| 吉安市| 讷河市| 大同县| 江北区| 方正县| 贞丰县| 长海县| 隆安县| 盐山县| 赣州市| 工布江达县| 紫金县| 佳木斯市| 万山特区| 阿坝| 左权县| 香河县| 昌图县| 高尔夫|