AMF協議讓FLASH工作化繁為簡
在Flash開發中,繁瑣的服務器傳輸工作一直讓開發者們頭疼。但是AMF協議的出現讓這些工作有了簡化。下面我們就簡單介紹一下這個可直接內置于Flash中的協議吧。AMF協議***的特色在于可直接將Flash內置對象,例如Object, Array, Date, XML,傳回服務器端,并且在服務器端自動進行解析成適當的對象,這就減輕了開發人員繁復工作,同時也更省了開發時間。由于AMF采用二進制編碼,這種方式可以高度壓縮數據,因此非常適合用來傳遞大量的資料。數據量越大,Flash Remoting的傳輸效能就越高,遠遠超過Web Service。至于XML, LoadVars和loadVariables() ,它們使用純文本的傳輸方式,效能就更不能與Flash Remoting相提并論了。
注意:Flash Remoting需要瀏覽器支持Bin ary POST,Flash 播放器在Nets cape 6.x.環境下運行Flash Remoting會不起作用(Flash Remoting調用沒有效果也不返回錯誤), Nets cape 7已經糾正了這個b u g 。對于早期Sa fari和Chim era版的蘋果機也有這個問題。同樣是輕量級數據交換協議,同樣是通過調用遠程服務,同樣是基于標準的HTTP和HTTPS協議, Flash Remoting為什么選擇了使用AMF而放棄了SOAP與Flash 播放器通信呢有如下原因:
SOAP將數據處理成XML格式,相對于二進制的AFM太冗長了; AMF能更有效序列化數據;因為AMF的初衷只是為了支持Flash ActionScript的數據類型,而SOAP卻致力于提供更廣泛的用途; AMF支持Flash 播放器 6只需要瀏覽器增加4 KB左右(壓縮后)的大小,而SOAP就大多了; SOAP的一些頭部文件請求在Flash 播放器 6不支持。那Flash 播放器 6為什么能訪問基于SOAP的Web服務呢?原來Flash Remoting網關將SOAP請求在服務器端與轉換成AFM格式,然后利用AFM與Flash 播放器通信。另外,AMF包中包含onResult事件(比如說response事件)和onStatus事件(比如說error事件),這些事件對象在Flash中可以直接使用。
AMF協議從Flash MX時代的AMF0發展到現在的AMF3。AMF3用作Flash Playe 9的ActionScript 3.0的默認序列化格式,而AMF0則用作舊版的ActionScript 1.0和2.0的序列化格式。 在網絡傳輸數據方面,AMF3比AMF0更有效率。AMF3能將int和uint對象作為整數(integer)傳輸,并且能序列化ActionScript 3.0才支持的數據類型, 比如ByteArray,XML和Iexternalizable。
在Flash Remoting MX中,AMF正是具備這種特性,只不過這里它是一種信息編碼格式。它本身并不產生信息數據,而是用于編碼和解碼通過HTTP在Flash影片應用程序和遠程服務之間傳遞的數據。
由于AMF是專為ActionScript對象模型設計的信息編碼格式,所以對于使用Flash Remoting MX的Flash影片應用程序來說非常高效。
AMF的全稱是Action Message Format,它是一個二進制數格式,專為ActionScript對象模型設計。要從遠程服務發送和接收信息,Flash Remoting MX就使用Action Message Format。使用AMF,Flash Remoting MX可以編碼和解碼通過HTTP在Flash影片應用程序和遠程服務之間傳遞的數據。
AMF協議符合Simple Object Access Protocol(SOAP)協議格式,它使用信息包格式分段傳送信息。一個AMF信息包包含下面5個部分。
(1)信息包頭,這一部分包含了AMF版本信息。
(2)上下關系頭計數。
(3)上下關系頭配置。上下關系頭包含了關于一個一個獨立的AMF信息應當怎樣被處理的描述信息。
(4)信息計數。
(5)信息配置。
在客戶端,服務端方法請求被使用NetServices類或Service類的方法自動序列化為AMF格式;在服務端, Flash Remoting MX逆序列化AMF信息。
當服務端處理完成時,結果又被序列化為AMF格式,并發回Flash影片應用程序。服務端創建的AMF協議信息格式與客戶端創建的AMF信息格式相同。
單獨的AMF協議信息包主體內包含了錯誤或響應對象,它們被表述成一個ActionScript對象。