簡析AMF協(xié)議的內(nèi)容處理流程
對Flash比較熟悉的朋友可能知道AMF協(xié)議。這個協(xié)議的使用更多地是在一些資料處理等方面的領(lǐng)域。但是這個協(xié)議也仍然是基于Http協(xié)議的。那么我們現(xiàn)在就來簡單了解一下有關(guān)AMF這個協(xié)議的具體情況吧。
基于Http協(xié)議的AMF協(xié)議
它的內(nèi)容處理過程大致是這樣:
1.從客戶端獲取Http請求(Request)流.
2.對流進行解串行化(Deserialize),得到服務(wù)器端程序能夠識別的數(shù)據(jù),并建立一個響應(yīng)(Response)消息
3.Debug開始
4. 對流進行各種處理(記錄、許可、服務(wù))得到返回值
5.對響應(yīng)流進行串行化
6.發(fā)送Http響應(yīng)給客戶端
Flash ActionScript數(shù)據(jù)類型在AMF協(xié)議中對應(yīng)的值是:
- 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的資料型態(tài),透過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端自動進行轉(zhuǎn)譯成適當(dāng)?shù)膶ο?例如flash 的Array傳回PHP時就會自動轉(zhuǎn)換為Associative Array;這個特色對開發(fā)者最大的好處在于不需要再人工處理serialization與deserialization的繁復(fù)工作,不但精確度更高,同時開發(fā)也更省時間。
由于AMF協(xié)議是binary format并且編碼時經(jīng)過高度壓縮,因此非常適合用來傳遞大量的資料,根據(jù)flashorb網(wǎng)站的測試(主要針對web service與flash remoting),當(dāng)資料量越大時,flash remoting的傳輸效能就越高,遠(yuǎn)遠(yuǎn)超過web service的表現(xiàn),因此同樣的道理也可得知xml,loadVars, loadVariables等使用plaine text format的傳輸方式自然也無可比擬。