AMF協(xié)議掃盲篇
在以往的學習中,我們大多數(shù)來針對網(wǎng)絡的構(gòu)架中的協(xié)議來進行學習和討論。那么今天,我們就來介紹一種比較特別的協(xié)議給大家認識,就是AMF協(xié)議。對一些開源性系統(tǒng)或者知識了解的朋友應該有聽說過這個協(xié)議。
在日常的RIA開發(fā)中,Flex或者基于純Actionscript3的RIA應用非常普遍。 在客戶端與服務端的交互中,大家用的比較多的幾種方式是:純文本內(nèi)容,XML,JSON等。 不過,隨著Adobe將AMF協(xié)議開源,越來越多的人開始使用基于AMF協(xié)議的實現(xiàn)來與服務器交互數(shù)據(jù)。 而BlazeDS是Adobe發(fā)布的一個開源AMF協(xié)議服務器端Java實現(xiàn). 通過BlazeDS,你可以開發(fā)基于Flex,Actionscript3的客戶端應用程序,并且使用AMF(Advanced Message Format)與服務器交互數(shù)據(jù)。本文是這個系列教程中的***篇,目的是介紹AMF協(xié)議。
AMF協(xié)議是Adobe開發(fā)的一種消息交換協(xié)議,其優(yōu)點包括:
更小的數(shù)據(jù)傳輸量
由于AMF協(xié)議采用了二進制的編碼方式,省去了很多控制符。比如在XML中,我們傳輸一段數(shù)據(jù),需要把許多XML標簽都傳輸過去,類似于<item></item>此類的控制符沒有太大的實際意義,但是很大程度上增加了數(shù)據(jù)傳輸量。
AMF協(xié)議則省去了大部分的可見控制符,采用二進制編排方式,效率極高。另外,由于同時也對數(shù)據(jù)進行了壓縮,因此同樣的數(shù)據(jù),可以極大節(jié)省帶寬。如果你的服務器每天的流量在1百萬以上的訪問,這些節(jié)省的流量則是想等客觀的。
更安全的數(shù)據(jù)傳輸
在基于二進制編碼的前提下,數(shù)據(jù)被編碼傳輸。雖然不能滿足加密數(shù)據(jù)的需要,但是,可以避免其他人直接查看數(shù)據(jù)內(nèi)容。
對程序員更友好的數(shù)據(jù)接口
AMF本質(zhì)上也是一種遠程方法調(diào)用的支持協(xié)議,其可以將服務器端或者客戶端的對象序列化,當數(shù)據(jù)被傳輸?shù)侥康亩藭r,重新反序列化成目的端的內(nèi)存中的對象。
大家在進行XML操作的時候,會花費很多精力處理XML的編碼與讀取。比如在服務器,大家需要將數(shù)據(jù)從數(shù)據(jù)庫或者內(nèi)存中的某處取出,對其進行一定的數(shù)據(jù)編碼,生產(chǎn)一個XML文檔。發(fā)送到客戶端,在客戶端,則需要將XML解析,將其中的數(shù)據(jù)還原到內(nèi)存中。 這個過程在使用AMF協(xié)議的時候,就被省略了。AMF協(xié)議可以很好的支持J2ee開發(fā)中的VO模式。
數(shù)據(jù)的傳輸穩(wěn)健性更高
這也許不是AMF協(xié)議自身的功能,而是要歸功于Flash Player.由于我們使用AMF協(xié)議的時候,一般都是使用基于Flash客戶端。我們在開發(fā)過程中測試傳送100萬條數(shù)據(jù)。如果使用瀏覽器的Javascript引擎接受,不管使用任何編碼協(xié)議,I.E瀏覽器幾乎是要崩潰的,Firefox則是運行極為緩慢。而在使用AMF協(xié)議傳輸?shù)紽lash播放器中傳輸這些數(shù)據(jù),對于客戶端的影響則是要小很多的。最起碼程序還能正常響應。
在開發(fā)Flex應用程序的時候,根據(jù)后端服務器使用的不同情況,目前可以支持AMF的編程語言有.Net,Java,PHP,Ruby on Rail,python,curl, ColdFusion 等 。