AMF(Action Message Format)

AMF是Adobe獨家開發出來的通信協議,它採用二進制壓縮,序列化、反序列化、傳輸數據,從而爲Flash 播放器與Flash Remoting網關通信提供了一種輕量級的、高效能的通信方式。如下圖所示:


AMF(Action Message Format)是一種 binary format的資料型態,透過 AMF overHTTP的方式將flash端資料編碼後傳回server,server端的remotingadaptor接收到資料後則會譯碼回正確的native對象,交給正確的程序處理。

AMF最大的特色在於可直接將Flash內置對象,例如Object, Array, Date, XML,傳回服務器端,並且在服務器端自動進行解析成適當的對象,這就減輕了開發人員繁複工作,同時也更省了開發時間。由於AMF採用二進制編碼,這種方式可以高度壓縮數據,因此非常適合用來傳遞大量的資料。數據量越大,Flash Remoting的傳輸效能就越高,遠遠超過Web Service。至於XML, LoadVars和loadVariables() ,它們使用純文本的傳輸方式,效能就更不能與Flash Remoting相提並論了。

注意:Flash Remoting需要瀏覽器支持Binary POST,Flash 播放器在Netscape 6.x.環境下運行Flash Remoting會不起作用(Flash Remoting調用沒有效果也不返回錯誤), Netscape 7已經糾正了這個bug 。對於早期Safari和Chimera版的蘋果機也有這個問題。

同樣是輕量級數據交換協議,同樣是通過調用遠程服務,同樣是基於標準的HTTP和HTTPS協議, Flash Remoting爲什麼選擇了使用AMF而放棄了SOAP與Flash 播放器通信呢? 有如下原因:

1. SOAP將數據處理成XML格式,相對於二進制的AFM太冗長了;
2. AMF能更有效序列化數據;因爲AMF的初衷只是爲了支持Flash ActionScript的數據類型,而SOAP卻致力於提供更廣泛的用途;
3. AMF支持Flash 播放器 6只需要瀏覽器增加4 KB左右(壓縮後)的大小,而SOAP就大多了;
4. 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。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章