基於XML的Web分佈式數據交換技術

一、WDDX的產生

    WDDX,英文全稱爲Web Distributed Data Exchange,是一種基於XML的Web分佈式數據交換技術。WDDX最早是美國Allaire公司的程序技術設計師Simeon Simeonov爲了解決ColdFusion中涉及到的分佈計算問題而建立的。隨着工作的開展,WDDX逐漸演變成爲一種可用於不同的應用環境中交換複雜的結構化數據的數據交換技術。應用WDDX,不同的Web系統之間可以方便地進行跨語言、跨系統、跨平臺的複雜數據的交換與共享,對於提高Web站點的整體價值以及協助Web開發人員更加方便地構建Web系統有着重要的應用意義。


二、WDDX工作機理及組成

    簡單地說,WDDX是通過在不同應用環境下的結構化數據之間建立一個"交換橋樑"---“XML中間件”完成數據交換的。因爲幾乎所有Web領域標準的開發環境(如ColdFusion, Perl, ASP, Java, #, PHP等)都包含有自己內在的數據結構,所以WDDX爲每一種語言提供了一些模塊. 這些模塊既可以自動地將這些內在的數據結構翻譯成一種精煉的基於XML的描述,即序列化(serialized);同樣也可以將基於XML的描述轉換爲某 種語言環境下的數據結構,即反序列化(deserialized)。這樣,兩個不同應用環境下的結構化數據通過基於XML的描述所構成的中間件實現交換或 者共享。比如,WDDX程序員可以在ColdFusion中獲取一個複雜數組的值,通過WDDX相應模塊將其序列化成爲XML所描述的數據結構,然後將其 發送給ASP服務器,最後再通過WDDX模塊將該XML所描述的數據結構反序列化轉換成一個VBScript的數組對象,而原先的所有數據類型都被無損轉 換。同時,由於所有的XML處理和交互過程都轉移至WDDX模塊中,開發者就不必再對XML文檔本身進行編程和處理,從而使得這種語言之間的轉換過程對於開發者來說就更加透明。

    WDDX由兩大部分組成:

    第一部分是根據XML 1.0規範制定的一種獨立語言的數據描述。依據規範,WDDX支持的數據類型有布爾型(boolean) 、 數字型(number)、 日期型(date-time) 和 字符串型(string)這些基本數據類型。此外WDDX還支持下列複雜數據類型:數組(array)、 結構(structure) 和記錄集(recordset)。其中,數組可以是用整數標引的任意類型對象的集合,結構可以是用字符串標引的任意類型對象的集合,記錄集則是對數據的列 表型封裝。記錄集中只允許有基本數據類型。

    第二部分就是爲那些使用WDDX的語言所編制的模塊集合。這些語言包括ColdFusion 、Java、ASP、#、PHP、Python、ActiveX、COM、Perl等。另外,WDDX不僅僅適用於Web應用,將WDDX同COM相結合,開發人員甚至可以在任意一種流行的Windows應用開發環境下(包括Visual Basic,Delphi,PowerBuilder,C++和Java)用WDDX進行分佈式數據開發。

結構實例:


三、WDDX應用示例

    與WDDX工作機理相對應,使用WDDX主要包括數據序列化、包創建、數據反序列化三個步驟,通過調用相關函數實現。WDDX爲不同的應用開發語言提供了 不同的相關函數,爲了簡化,這裏以利用WDDX在兩個不同服務器上的PHP腳本之間傳遞複雜的數據結構爲例,簡要說明WDDX的使用。

 

1、PHP中的WDDX函數

    wddx_packet_start(): 創建一個新的WDDX包,返回一個包標識。
    語法: int wddx_packet_start(string [comment]);返回值: 整數

    wddx_packet_end(): 結束一個指定的 WDDX包,並返回WDDX的字符串表示。參數 packet_id 爲封包的標識代碼。
    語法: string wddx_packet_end(int packet_id);返回值: 字符串

    wddx_serialize_value(): 生成一個單值的序列化表示,並創建一個新的WDDX包來包含該序列化的值,返回WDDX包的字符串表示。參數 var爲將被序列化的值的內容。參數comment爲在封包表頭的字符串,可省略。。
    語法: string wddx_serialize_value(mixed var, string [comment]);返回值: 字符串

    wddx_serialize_vars(): 將多個數值序列化,並創建一個新的WDDX包來包含這一組序列化後的值,返回WDDX包的字符串表示。參數依次爲將被序列化的值的內容。。
    語法: string wddx_serialize_vars(string var_name | array var_names [, ... ] );返回值: 字符串

    wddx_add_vars(): 用於增加一個或多個變量到使用wddx_packet_start()所創建的包中。若不成功則返回 false。
    語法: boolean wddx_add_vars(int packet_id, ...);返回值: 布爾值

    wddx_deserialize()/wddx_unserialize(): 將WDDX封包反序列化成分散資料,返回一個混合類型的變量,可以是字符串、數組等。如果 WDDX包包括超過一個的變量,一個相關數組將被返回,數組的鍵值將是序列化變量的名字。 參數 packet 爲封包字符串。
    語法: mixed wddx_deserialize(string packet);返回值: 混合類型資料

 

2、使用實例


發佈了64 篇原創文章 · 獲贊 2 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章