[ AS3 ] AMF ( Action Message Format ) ?

2009. 7. 24. 02:10AS3

옛날부터 많이 봐왔지만 이게 뭔가하고 세밀히 본적이 없었던거 같다 ..

야동도 다보고 술도 다 먹었겠다 이른 새벽에 조심히 검색해서 내용을 정리해보았습니다

http://cafe.naver.com/amfphpsamo/175 의 파란토끼 님 글을 보는게 가장 더 이해가 빠를 것이다 참고 바랍니다

( 아래의 글은 대부분 파란토끼님의 글을 재인용하였습니다 오해 없으시길 바랍니다 )



- AMF

  FLASH MX 시절에 Macromedia 에서 Flash 플레이어와 원격 서비스간에 객체 엑세스 및 데이터 교환용으로 만든   
  http 기반의 프로토콜 이고 이를 AMF(Action Message Format) 라고 부릅니다

-  특징

/ 우린 가장 흔하게 서버와 데이터 통신을 한다고 하면 xml 을 떠오릅니다 가장 흔한 방법이죠 그러나 이게 만약 대용량이라면?

물론 분할로 데이터를 get방식으로 조금씩 필요한 데이터만큼 받으면 그걸 사용하면 상관없겠지만 여기서 걸리는건 트래픽 입니다

그리고 걸리는 보안문제 ... 이걸 해결해주는 녀석이 AMF 입니다

/ 서버로부터 객체를 전달 받은후 인코딩과정을 거치게 되면 완전한 형식으로 데이터로 변환

/  XML 은 보안이 되지 않습니다 .그러나 AMF 방식은 프로토콜이 전용이므로 보이지 않음 또한 80 포트를 사용하기 때문에

왠만한 방화벽을 통과할수 있습니다  ( stratus 테스트 했을때 공유기 에서는 작동 안되었던 문제 이거로 해결가능한건가 ? )

/  원격 프로시져 호출을 압축된 이진 표현으로 인코딩하여 플래시 미디어 서버에서 현재 사용되고 있는 프로토콜형식으로 변환하여
전송합니다. 이 형식은 액션스크립트와 데이터값을 이진형식으로 직렬화 시키기 때문에 텍스트인 xml 보다 엄청난 양을 압축할수
있습니다 ( 바로 여기서 서버 부하 / 대용량 트래픽 문제를 약간 해소 할수 있을듯 합니다 )

% 이진표현인코딩 파일 포멧 관련 사이트
http://www.ezfmx.com/info/amf/


- 요즘은 원격으로 플래시 관련 디버깅을 하고 있다 . 이거에 관한 자세한 블러그는

http://blog.naver.com/logon77 에서 참고하길 바랍니다


-  Flash Player 8 버전에서는 AMF0 / Flash Player 9 는 AMF3 사용 가능합니다


AMF3 스펙 을 보니

  • Object traits can now be sent by reference
  • Strings can now be sent by reference
  • int/uint type support
  • flash.utils.ByteArray type support, can also be sent by reference
  • flash.utils.IExternalizable support
  • Variable length encoding scheme for integers to reduce data size
  • References are sent using variable length integer
  • String UTF-8 length uses variable length integer
  • Array count uses variable length integer
  • A single Array type marker covers both strict and ECMA Arrays
  • Dates no longer send timezone information
  • Dates can now be sent by reference
  • XMLDocument UTF-8 length uses variable length integer
  • XMLDocument can now be sent by reference
  • XML type support, can also be sent by reference
  • XML UTF-8 length uses variable length integer
  • ByteArray type length uses variable length integer
  • Boolean true and false are now sent as one byte type markers
  • Unsupported type marker has been removed
  • Reserved RecordSet and Movieclip type markers have been removed
  • 그냥 다 무시하고 대충 슝슝 보면

    - Boolean타입의 true/false을 한 바이트 타입마커로 지정
    - Array로 ECMA array와 strict array을 동시지원
    - 레퍼런스값, 길이값등을 가 변정수로 대체
    - reference에 의해서 상대측 FlashPlayer에 있는 객체라면 전부 새로보낼 필요없이 참조번호만을 보낼수있나봄. (bandwitdh절약/성능개선)
    - flash.utils.IExternalizable, XML등을 추가지원. DATE에서 timezone정보를 제외

     
    결국 더욱 액션스크립트화 (?) 시켰고 / 참조값을 도입하여 성능을 개선시켰고 / XML 지원을 강화 / 길이값 제한을 없애는 한편 전송 성능 항상 시켰다는 내용입니다 ..^^

    -  현재는 RTMP 라는 새로운 기술이 공개 되었습니다 약간 혼돈할지도 모르시겠지만 딱히 비교하자면

    AMF 는 통신 내용에 대한 것이고 RTMP 는 통신 방식에 대한것이니 너무 복잡하게 생각하지 마시길 바랍니다 ^^




    이 글은 어디까지나 제가 머리속에서 쉽게 이해하기 위해 쓴글입니다 혹시나 오역이나 잘된정보가 있으면 때려주세요 ^_^