메시지 채널은 두 워커 간에 단방향 데이터 전달 링크를 제공합니다. 워커 간 데이터 전달을 위해 MessageChannel 객체를 사용하는 방식에는 핵심적인 이점 하나가 있습니다. 메시지 채널을 사용하여 메시지(객체)를 전송할 경우, MessageChannel 객체에서는
channelMessage
이벤트를 전달합니다. 수신 워커의 코드에서는 해당 이벤트를 수신하여 데이터의 사용 가능 시기를 파악할 수 있습니다. 따라서 수신 워커에서는 데이터의 업데이트 여부를 상시적으로 확인할 필요가 없습니다.
메시지 채널 하나는 두 개의 워커, 즉 전송자 및 수신자와만 연결되어 있습니다. MessageChannel 객체를 만들려면 전송자 Worker 객체의
createMessageChannel()
메서드를 호출하고 수신 워커를 인수로 전달하십시오.
// In the sending worker swf
var sendChannel:MessageChannel;
sendChannel = Worker.current.createMessageChannel(receivingWorker);
두 워커 모두 MessageChannel 객체에 액세스할 수 있어야 합니다. 이를 위한 가장 간단한 방법은
setSharedProperty()
메서드를 사용하여 MessageChannel 객체를 전달하는 것입니다.
receivingWorker.setSharedProperty("incomingChannel", sendChannel);
수신 워커에서 MessageChannel 객체의
channelMessage
이벤트에 대해 리스너를 등록합니다. 이 이벤트는 전송 워커에서 메시지 채널을 통해 데이터를 전송할 때 전달됩니다.
// In the receiving worker swf
var incomingChannel:MessageChannel;
incomingChannel = Worker.current.getSharedProperty("incomingChannel");
incomingChannel.addEventListener(Event.CHANNEL_MESSAGE, handleIncomingMessage);
실제로 데이터를 전송하려면 전송 워커에서 MessageChannel 객체의
send()
메서드를 호출하십시오.
// In the sending worker swf
sendChannel.send("This is a message");
수신 워커에서 MessageChannel은
channelMessage
이벤트 핸들러를 호출합니다. 그런 다음 수신 워커에서는 MessageChannel 객체의
receive()
메서드를 호출하여 데이터를 가져올 수 있습니다.
private function handleIncomingMessage(event:Event):void
{
var message:String = incomingChannel.receive() as String;
}
receive 메서드에 의해 반환된 객체는
send()
메서드에 전달된 객체와 동일한 데이터 유형을 갖습니다. 수신된 객체는 전송자에 의해 전달된 객체의 사본이며 전송 워커에 있는 객체의 참조가 아닙니다. 단, 해당 객체가
공유 참조 및 복제 값
에 설명되어 있는 몇몇 데이터 유형 중 하나에 속하는 경우는 예외입니다.