簡析AMF協議的內容處理流程
對Flash比較熟悉的朋友可能知道AMF協議。這個協議的使用更多地是在一些資料處理等方面的領域。但是這個協議也仍然是基于Http協議的。那么我們現在就來簡單了解一下有關AMF這個協議的具體情況吧。
基于Http協議的AMF協議
它的內容處理過程大致是這樣:
1.從客戶端獲取Http請求(Request)流.
2.對流進行解串行化(Deserialize),得到服務器端程序能夠識別的數據,并建立一個響應(Response)消息
3.Debug開始
4. 對流進行各種處理(記錄、許可、服務)得到返回值
5.對響應流進行串行化
6.發送Http響應給客戶端
Flash ActionScript數據類型在AMF協議中對應的值是:
- Number 0x00;
- Boolean 0x01;
- String 0x02;
- Object 0x03;
- MovieClip 0x04;
- Null 0x05;
- Undefined 0x06;
- Reference 0x07;
- ECMAArray 0x08;
- ObjectEnd 0x09;
- StrictArray 0x0a;
- Date 0x0b;
- LongString 0x0c;
- Unsupported 0x0d;
- Recordset 0x0e;
- XMLObject 0x0f;
- TypedObject(Class) 0x10;
AMF(Action Message Format)是一種binary format的資料型態,透過AMF over HTTP的方式將flash端資料編碼后傳回server,server端的remoting adaptor接收到資料后則會譯碼回正確的native對象,交給正確的程序處理。
AMF除了用于Flash remoting外,也廣泛的用于Local Connection 與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 text format的傳輸方式自然也無可比擬。