軟體訊息傳遞

軟體訊息傳遞

在計算機科學中,軟體訊息傳遞(Message passing)是一種通信的形式,在並發計算、並行計算、面向對象編程與進程間通信中使用。在這種模式中,進程或對象以傳送及接收訊息的方式來達成同步。不同於傳統程式設計通過名字直接調用(invoking)一個進程、子例程或者函式,訊息傳遞直接傳送訊息給一個進程,依賴進程或基礎框架來調用實際執行的代碼。可分為同步方式與異步方式。

簡介

為便於統一,國際標準化組織制定了協定(protocol),將電信網中的各部分進行了明確的分工,定義了接口,並對接口進行了詳細的定義:規定了經由 A 進程到 B 進程只能傳遞哪些信息,經由 B 進程到 A 進程又只能傳遞哪些信息。信息在軟體中的表示,就是訊息。軟體訊息傳遞是一種通信范型,在這種模型中,由一個傳信者,將訊息(messages)送給一個,或多個收信者。訊息的形式,根據作業系統與程式語言的支持,而有所不同,常見的有方法(method),信號(signals)與數據包(data packets)。常見軟體訊息傳遞有開放網路運算遠程過程調用、CORBA、Java RMI、Distributed COM、SOAP等。

公共對象請求代理體系結構

公共對象請求代理體系結構(Common Object Request Broker Architecture, CORBA)是由OMG(對象管理組織,Object Management Group)提出的套用軟體體系結構和對象技術規範,其核心是一套標準的語言、接口和協定,以支持異構分布應用程式間的互操作性及獨立於平台和程式語言的對象重用。CORBA 建立了一個跨語言的分散式對象體系構架,提供了一個多種語言對象間進行互動的分散式操作規範。CORBA 技術的產生是面向對象技術的發展和分散式網路環境發展的必然結果。隨著計算機軟體及硬體的發展,計算機已經套用到科研,教育,國防,及經濟發展的各個領域,軟體的規模不斷擴大,複雜的計算機套用使得模組化的軟體設計及開發已經不適合大型軟體的設計與開發。面向對象技術的產生和發展解決了代碼的可重複利用,數據封裝等模組化設計難以解決的問題。同時面向對象的設計和開發使得代碼更容易控制和維護,從而更適合於大型軟體的設計與開發,成為軟體設計的發展趨勢。另外,在計算機網路的發展方面,計算機套用的重心從單機時代逐漸向 C/S的網路結構發展。不同的硬體廠商,不同的操作平台,以及日趨複雜的網路套用,使得分散式軟體的設計開發變得複雜,軟體成本提高,並且在不同平台上難以兼容。CORBA 涉及的基本概念:

對象:CORBA 規範中的對象符合傳統對象的語義,具有封裝、繼承、多態等特點。一個對是一個可標識的被封裝實體,它能按照客戶請求提供一個或多個服務。對象引用:這是用來指定對象的標識符稱為對象引用。一個對象可以擁用多個對象引用,但一個對象引用必須且僅僅對應於一個對象。

對象實現:是指對象系統的實現,即服務提供方。實現模型包括兩個部分:執行模型和構造模型。執行模型描述如何執行服務,執行請求服務所需要的計算活動包括計算所請求的結果以及更新系統狀態。構造模型描述如何定義服務。CORBA 規範中用接口來描述服務提供方可以執行的操作。

接口:接口是使用 IDL 描述的一組操作,客戶可以通過接口向對象請求這些操作。接口繼承提供的符合機制允許對象支持多個接口,屬性是接口的一部分。在邏輯上,屬性等價於聲明一對輔助函式:一個獲取函式的值(get);一個設定屬性的值(set)。

請求:請求方被稱為客戶,客戶通過構造一個請求來要求得到服務。在請求中要指定提供服務的對象實現、執行的操作、操作上下文以及操作多用到的參數。

激活:在執行服務請求、對象或對象實現中的方法被調用,如果對象回對象實現的初始狀態不能滿足方法調用的要求,便需要通過某種方法使其狀態發生改變,以滿足方法調用的要求,這個過程稱為激活。

分散式系統需要在不同主機之間能夠進行通信。Java 語言支持基本的通信機制Socket通信,這種通信方式非常靈活,並且可以滿足大多數套用的通信需求。但使用Socket技術需要在客戶端和伺服器端對傳遞的信息編碼和解碼,並且這以過程比較複雜,非常容易出錯 。

遠程過程調用

遠程過程調用(Remote Procedure Call,簡稱 RPC)把通信接口抽象到過程調用級別,從而編程人員不必關心底層的通信過程。但是遠程過程調用不能很好的適應分散式對象系統。在這種系統中,不同地址空間的對象需要相互通信,這就需要遠程方法調用(RMI)。遠程方法調用的優勢就是編程人員不必編寫訊息的編碼、解碼過程,從客戶端來看,遠程方法調用和遠程過程調用很相似。Java 遠程方法調用(Java Remote Method Invocation,簡稱Java RMI )是一種分散式系統技術,通過使用Java語言來編寫分散式對象。它允許一個Java虛擬機(JVM)調用運行在位於網路中另一處JVM的對象方法,它使得多台機器之間可以分布資源和處理負載。在與遠程對象的通信過程中,RMI將使用標準機制(用於 RPC 系統):Stub與 Skeleton。遠程對象的Stub擔當遠程對象的客戶本地代表或代理人角色。調用程式將調用本地Stub的方法,而本地Stub將負責執行對遠程對象的方法調用。在RMI 中,遠程對象的 Stub 與該遠程對象所實現的遠程接口集相同。調用 Stub 的方法時,將執行下列操作:

•初始化與包含遠程對象的遠程虛擬機的連線。

•對遠程虛擬機參數的進行編組(寫入並傳輸。

•等待方法調用結果。解編(讀取)返回值或異常。

•將值返回給調用程式。

為了向調用程式展示比較簡單的調用機制,Stub 將參數的序列化和網路級通信隱藏了起來。在遠程虛擬機中,每個遠程對象都可以有相應的 Skeleton。Skeleton 負責將調用分配給實際的遠程對象實現,它在接收進入方法調用時執行下列操作:解編(讀取)遠程方法的參數、調用實際遠程對象實現上的方法、將結果(返回值或異常)編組(寫入並傳輸)給調用程式;遠程引用層遠程引用層通過定義 JAVA 遠程方法協定實現對遠程對象方法的訪問;傳輸層實現對位元組流的傳輸,負責建立和管理不同 JAVA 虛擬機之間的連線。一般採用 TCP/IP 協定實現,但也可以採用 UDP 協定實現位元組流的傳輸。

開放網路運算遠程過程調用

開放網路運算遠程過程調用(Open Network Computing Remote Procedure Call,縮寫為ONC RPC),一種被廣泛套用的遠程過程調用(RPC)系統,是一種屬於套用層的協定堆疊,底層為TCP/IP協定。開放網路運算(ONC)最早源自於太陽微系統(Sun),是網路檔案系統計畫的一部分,因此它經常也被稱為Sun ONC 或 Sun RPC。現今在多數類UNIX系統上都實現了這套系統,微軟公司也以Windows Services for UNIX在他們產品上提供ONC RPC的支持。2009年,太陽微系統以標準三條款的BSD許可證發布這套系統。2010年,收購了太陽微系統的甲骨文公司確認了這套軟體BSD許可證的有效性與適用範圍。

簡單對象訪問協定

簡單對象訪問協定(Simple Object Access Protocol,SOAP)是交換數據的一種協定規範,是一種輕量的、簡單的、基於XML(標準通用標記語言下的一個子集)的協定,它被設計成在WEB上交換結構化的和固化的信息。SOAP為了簡化網頁伺服器(Web Server)從XML資料庫中提取數據時,節省去格式化頁面時間,以及不同應用程式之間按照HTTP通信協定,遵從XML格式執行資料互換,使其抽象於語言實現、平台和硬體。此標準由IBM、Microsoft、UserLand和DevelopMentor在1998年共同提出,並得到IBM,蓮花(Lotus),康柏(Compaq)等公司的支持,於2000年提交給全球資訊網聯盟(World Wide Web Consortium;W3C),SOAP 1.1版是業界共同的標準,屬於第二代的XML協定(第一代具主要代表性的技術為XML-RPC以及WDDX)。用一個簡單的例子來說明SOAP使用過程,一個SOAP訊息可以傳送到一個具有Web Service功能的Web站點,例如,一個含有房價信息的資料庫,訊息的參數中標明這是一個查詢訊息,此站點將返回一個XML格式的信息,其中包含了查詢結果(價格,位置,特點,或者其他信息)。由於數據是用一種標準化的可分析的結構來傳遞的,所以可以直接被第三方站點所利用。SOAP封裝(envelope),它定義了一個框架,描述訊息中的內容是什麼,是誰傳送的,誰應當接受並處理它以及如何處理它們;

SOAP編碼規則(encoding rules),它定義了一種序列化的機制,用於表示應用程式需要使用的數據類型的實例;SOAP RPC表示(RPC representation),它定義了一個協定,用於表示遠程過程調用和應答;SOAP綁定(binding),它定義了SOAP使用哪種協定交換信息。使用HTTP/TCP/UDP協定都可以。

把SOAP綁定到HTTP提供了同時利用SOAP的樣式和分散的靈活性的特點以及HTTP的豐富的特徵庫的優點。在HTTP上傳送SOAP並不是說SOAP會覆蓋現有的HTTP語義,而是HTTP上的SOAP語義會自然的映射到HTTP語義。在使用HTTP作為協定綁定的場合中,RPC請求映射到HTTP請求上,而RPC應答映射到HTTP應答。然而,在RPC上使用SOAP並不僅限於HTTP協定綁定。

相關詞條

熱門詞條

聯絡我們