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