AMF協議概念簡述

來源:互聯網
上載者:User

AMF協議的最基本概念則是在XML的文本資料中瞭解到的。隨著對這個協議的學習,發現它的使用已經不再僅僅局限在一種方式中。在很多其他領域也有了它的展現。現在我們就來認識一下這個協議吧。

AMF協議的曆史

ActionMessage Format協議的簡稱,AMF協議是Adobe公司自己的協議,主要用於資料互動和遠端程序呼叫,在功能上相當於WebService,但是AMF與WebService中的XML不同的是AMF是位元據,而XML是文本資料,AMF的傳輸效率比XML高。AMF使用HTTP方式傳輸,目前主要是用於ActionScript中,即實現Flex和Server之間的通訊。目前有二種版本--AMF0和AMF3

 

AMF協議的應用圖

 

它的內容處理過程:

1.從用戶端擷取Http請求(Request)流.

2.對流進行解序列化(Deserialize),得到伺服器端程式能夠識別的資料,並建立一個響應(Response)訊息

3.Debug開始

4. 對流進行各種處理(記錄?許可?服務)得到傳回值

5.對響應流進行序列化

6.發送Http響應給用戶端

 

FlashActionScript資料類型在AMF協議中對應的值是:

1.Number 0x00;

2.Boolean 0x01;

3.String 0x02;

4.Object 0x03;

5.MovieClip 0x04;

6.Null 0x05;

7.Undefined 0x06;

8.Reference 0x07;

9.ECMAArray 0x08;

10.ObjectEnd 0x09;

11.StrictArray 0x0a;

12.Date 0x0b;

13.LongString 0x0c;

14.Unsupported 0x0d;

15.Recordset 0x0e;

16.XMLObject 0x0f;

17.TypedObject(Class) 0x10;

 

 

AMF協議的特色

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

 

選擇了使用AMF而放棄了SOAP與Flash 播放器通訊有如下原因:

1 SOAP將資料處理成XML格式,相對於二進位的AFM太冗長了;

2 AMF能更有效序列化資料;因為AMF協議的初衷只是為了支援Flash ActionScript的資料類型,而SOAP卻致力於提供更廣泛的用途;

AMF從Flash MX時代的AMF0發展到現在的AMF3。AMF3用作FlashPlaye 9的ActionScript 3.0的預設序列化格式,而AMF0則用作舊版的ActionScript1.0和2.0的序列化格式。 在網路傳輸資料方面,AMF3比AMF0更有效率。AMF3能將int和uint對象作為整數(integer)傳輸,並且能序列化ActionScript3.0才支援的資料類型, 比如ByteArray,XML和Iexternalizable。

AMF(ActionMessage Format)是一種binary format的資料型態,透過AMF over HTTP的方式將flash端資料編碼後傳回server,server端的remoting adaptor接收到資料後則會解碼回正確的native對象,交給正確的程式處理。 AMF協議除了用於Flashremoting外,也廣泛的用於 LocalConnection 與 Flash communication server,它最大的特色在於可直接將flash native object。

例如Object, Array, Date, XML,傳回server端,並且在server端自動進行轉譯成適當的對象,例如flash 的Array傳回PHP時就會自動轉換為 Associative Array;這個特色對開發人員最大的好處在於不需要再人工處理serialization 與 deserialization的繁複工作,不但精確度更高,同時開發也更省時間。 由於AMF協議是binary format並且編碼時經過高度壓縮,因此非常適合用來傳遞大量的資料,根據flashorb網站的測試(主要針對web
service與flash remoting),當資料量越大時,flash remoting的傳輸效能就越高,遠遠超過web service的表現,因此同樣的道理也可得知xml, loadVars, loadVariables 等使用plaine textformat的傳輸方式自然也無可比擬。

 

 

 

AMF的組成部分

AMF檔案總體來說分為4部分:前言(Preamble)、AMF頭、AMF主體和主體的響應。前言的前2位元組用於說明AMF的版本,目前AMF有2個版本AMF0和AMF3.如使用AMF0則是:00 00。第3和第4位元組用16位整數表示AMF頭的數量。每一個AMF頭是由以下四部分組成:

UTF string 表示Header的名字

Boolean 表示該Header是否是必須的

Int32表示Header的長度,但是好像很多情況下該值為FF FF FF FF,似乎這個欄位沒有意義。

Variable變數是某種AMF協議資料類型。

在Header表示完後,接下來是一個16位的整數用來表示AMF主體的數量,在這個數量之後才是AMF主體。

AMF主體主要由以下四部分組成:

UTF String - Response表示請求的類和方法或響應的結果。

UTF String - Target是一個標識,其作用就是為了實現請求和響應的對應,通過Target找到該響應對應的請求。一般使用自增整數。

Int32- 表示主體的長度,該欄位一般沒有什麼用

Variable變數表示主體的資料。

主體響應是用戶端向伺服器發送一個AMF請求以後伺服器做出的和請求的主體格式相同的AMF響應,但是主體響應中的內容有所不同:

Response: 被設定為字串‘null'.

Target: 是請求的Target值再加上“/onStatus", “onResult", 或者 “/onDebugEvents"組成. “/onStatus" 是為執行階段錯誤而準備的我們一般不關心這個. “/onResult" 表示該請求被正確調用. “/onDebugEvents" 是在調試時使用的,這裡也不用關心. 如果請求的Target是‘/1', 那麼被成功調用以後的主體響應應該是: ‘/1/onResult' 。

Data:就是響應後返回的AMF協議檔案對象。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.