참고 : http://www.flexlive.net/?p=102
         http://livedocs.adobe.com/blazeds/1/blazeds_devguide/lcconfig_3.html

BlazeDS 에서는 rtmp 채널을 지원하지 않기 때문에, 디폴트로 폴링 방식으로 메세징을 지원 합니다.
이런 사실 때문에, real-time messaging을 지원하지 않을거라는 착각을 할 수 있는데 다양한 테크닉으로 real-time messaging을 구현할 수 있습니다. 하지만 앞으로 소개될 테크닉들은 http-based 이기 때문에 독자적인 socket을 사용하는 lcds에 비해 속도와 동시접속에 있어서 뒤쳐질 수 밖에 없습니다.


Simple Polling

이 방식은 real-time의 효과를 볼 수 없는 기본적인 polling 입니다. 일정한 간격으로 요청(poll)하고 응답(ack) 받습니다. 만약 요청 했을 때, 다른 client로 부터 메세지가 들어와 있지 않다면 비어 있는 응답을 받습니다.

설정 방법은 다음과 같습니다.
<channel-definition id="polling-amf" class="mx.messaging.channels.AMFChannel">
    <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amfpolling" class="flex.messaging.endpoints.AMFEndpoint"/>
    <properties>
        <polling-enabled>true</polling-enabled>
        <polling-interval-seconds>4</polling-interval-seconds>
    </properties>
</channel-definition>



Piggybacking Polling
이 방식은 Simple Polling에서 일정한 간격에 의한 poll 이전에 다른 client의 메세지가 들어와 있을 경우, 다른 어떤 요청(Producer 또는 RemoteObject)을 보낸다면 그에 대한 결과와 더불어 메세지도 함께 응답 합니다.

설정 방법은 다음과 같습니다.
<channel-definition id="polling-amf" class="mx.messaging.channels.AMFChannel">
    <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amfpolling" class="flex.messaging.endpoints.AMFEndpoint"/>
    <properties>
        <polling-enabled>true</polling-enabled>
        <polling-interval-seconds>4</polling-interval-seconds>
        <piggybacking-enabled >true</piggybacking-enabled >
    </properties>
</channel-definition>



Long Polling

이 방식은 polling 이지만 다른 client로 부터 메세지가 올 때까지(또는 설정한 기간 만큼) poll을 잡아 놓음으로써 real-time의 효과를 볼 수 있습니다.

설정 방법은 다음과 같습니다.
wait-interval-millis : (default 0) poll 의 대기시간 입니다. -1의 경우 다른 client의 메세지가 올 때까지 무한대로 기다립니다.
max-waiting-poll-requests : 대기하는 poll의 갯수입니다.
<channel-definition id="long-polling-amf" class="mx.messaging.channels.AMFChannel">
    <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amfpolling" class="flex.messaging.endpoints.AMFEndpoint"/>
    <properties>
        <polling-enabled>true</polling-enabled>
        <wait-interval-millis>-1</wait-interval-millis>
        <polling-interval-millis>100</polling-interval-millis>
        <max-waiting-poll-requests>50</max-waiting-poll-requests>
    </properties>
</channel-definition>



Streaming

HTTP1.1 스펙의 open connection 기능을 이용함으로써, 서버 push를 구현하는 방법 입니다.
서버 push이기 때문에 real-time 그 자체라고 할 수 있습니다.

설정 방법은 다음과 같습니다.
max-streaming-clients : open connection의 갯수입니다.
<channel-definition id="streaming-amf" class="mx.messaging.channels.StreamingAMFChannel">
    <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/streamingamf" class="flex.messaging.endpoints.StreamingAMFEndpoint"/>
    <properties>
        <max-streaming-clients>10</max-streaming-clients>
    </properties>
</channel-definition>



퍼포먼스는 Stream -> long polling -> piggybacking polling -> simple polling 순으로 좋습니다.
설정 가능한 프로퍼티는 참고 문서를 참조 하세요.
신고
Posted by 째코