javascript|web
Web遠端程序呼叫(以下簡稱WebRPC)是在不重新整理頁面的前提下,對遠程方法進行調用,是最近的一個熱點;在一些場合下,他甚至成為不可替代的實現方式。WebRPC的實現方式經曆了從普通URL讀取,隱藏幀,IFrame, XMLHTTP乃至 Flash等。本文將對目前存在的WebRpc方案(產品)進行列表,並作簡單評價。
評價將在以下幾個方面進行:用戶端實現方式,伺服器端實現方式,是否自行封裝協議,是否支援序列化/還原序列化,序列化支援是否完備(原子類型,物件類型),是否支援非同步/同步方式。注意,由於Web方式的遠程調用沒有得到大規模運用。筆者自己並沒有在公司專屬應用程式中採用WebRPC的經驗,但在娛樂應用、線上遊戲中,已經得到了相當好的運用。這些應用已經在《面向非同步訊息的Web應用(AMOWA)》中得到詳細論述,有興趣的可以在產品指南欄目中閱讀這篇文章。
1 MSRS (Microsoft Remote Scripting)
地址:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/rmscpt/Html/rmscpt1.asp
簡介:在網頁出現的早期,瀏覽器功能有限。Applet的出現,為MSRS提供了平台。在這項方案中,MSRS通過一個applet類以及頁面上的參數配置,來與伺服器端互動,從而實現了遠程調用。採用此項技術實際上將頁面不重新整理的工作交給了一個名為rsproxy.class的不可見Applet完成。我見過早期的線上Web象棋採用此項方案。優點:輕而易舉跨瀏覽器;缺點:伺服器端採用微軟asp, applet載入緩慢;不支援資料類型序列化/還原序列化。
2 JSRS (Javascript Remote Scripting)
地址:http://www.blueshoes.org/en/javascript/jsrs/
簡介:支援兩種資料訪問方式:HTTP GET方式(動態載入JS檔案),HTTP POST方式(用JS動態建立一個Iframe, 在其中提交一個表單)。不用重新整理頁面,支援簡單資料的序列化/還原序列化。
3 XML-RPC
地址:http://www.xmlrpc.org/
簡介:XML-RPC定義了一種協議規範,由於它的輕量級、概念完整,因此目前絕大多數語言都有實現,包括Java(Apache xml-rpc), PHP, javascript, VBScript, python等等。最大的交流方式Blog協議,管理方法也遵循XML-RPC規範。優點:絕大多數語言都支援,簡單,規範。缺點:Java實現對資料類型序列化支援有限
4 dwr (Direct Web Remoting)
地址:https://dwr.dev.java.net/
簡介:一個在適當時候提出適當概念的小東西。採用xmlhttp傳遞請求,伺服器端利用反射找到相應方法執行後將結果返回。較有創意的是,他將伺服器端需要進行遠程調用的代碼動態轉換為相應的js代碼,前端可以直接顯式調用。簡單,可以作為WebRPC學習入門。不支援資料序列化
5 JSON-RPC
地址:http://oss.metaparadigm.com/jsonrpc/
簡介:採用一種沒聽說過的資料交換協議JSON(JavaScript Object Notation, http://www.crockford.com/JSON/) 作為協議基礎,在此之上進行資料調用,採用xmlhttp發送/接受請求,支援完整的資料序列化/反序列。目前,jason Web架構採用json-rpc為底層方式。
6 Burlap (http://caucho.com/burlap/index.xtp)
簡介:也許會奇怪,為什麼Burlap也能夠算得上遠程協議。實際上,與Hessian實現方式基本相同的Burlap(前者為二進位,後者為文本), 在協議完整性上能夠超過上述任一產品。目前我已經實現了JS調用Burlap服務的代碼,是目前所有遠程調用方式中最為優雅的實現。
7 XINS (XML Interface for Network Services)
地址:http://xins.sourceforge.net/index.html
簡介:按照官方網站的說法,SOA + Java + XML + code_generation - complexity => XINS。這個龐大的東西需要定義一攬子描述檔案然後才能在HTML中進行調用。從外觀上看,這是最像樣子的解決方案。對其瞭解不多,不做評價。
8 WebService, SOAP
簡介:除了微軟有一個webservice.htc控制項,mozilla也有相應的webservice訪問方式。因此,在HTML中訪問webservice也是可行的。只是這種協議過於笨重,除非必要,沒有人會在web用戶端中使用。
|
用戶端實現方式 |
伺服器端實現方式 |
是否自行封裝協議 |
序列化/還原序列化 |
同步方式/非同步方式 |
MSRS |
Applet |
Microsoft ASP |
無 |
不支援 |
同步+非同步 |
JSRS |
Iframe/動態載入js |
多種,php, java等 |
無 |
不支援 |
同步 |
XML-RPC |
Xmlhttp等多種方式 |
絕大多數語言都有支援 |
XML-RPC |
支援,Java實現有限支援,不支援自訂對象 |
同步+非同步 |
DWR |
Xmlhttp |
Java |
無 |
很弱 |
同步+非同步 |
JSON-RPC |
Xmlhttp |
Java |
JSON |
支援 |
同步+非同步 |
Burlap |
Xmlhttp |
Java |
Burlap |
完全支援 |
同步+非同步 |
XINS |
Xmlhttp |
Java |
是 |
支援 |
同步+非同步 |
WebService |
IE採用.htc, mozilla內建支援 |
不定,遵循webservice規範以及SOAP協議 |
SOAP |
支援,不同的平台上各有擴充 |
同步+非同步 |