Kanał komunikatów oferuje jednokierunkowe łącze do przekazywania danych między dwoma procesami roboczymi. Użycie obiektu MessageChannel do przesyłania danych ma jedną ważną zaletę. Wysłanie komunikatu (obiektu) za pomocą kanału wiadomości powoduje wywołanie zdarzenia
channelMessage
przez obiekt MessageChannel. Kod w odbierającym procesie roboczym może wykrywać to zdarzenie. Pozwala to określić moment udostępnienia danych. Dzięki temu odbierający proces roboczy nie musi ciągle sprawdzać, czy dane zostały zaktualizowane.
Kanał komunikatów jest powiązany z dwoma procesami roboczymi — nadającym i odbierającym. Aby utworzyć obiekt MessageChannel w procesie roboczym wysyłającym dane, należy wywołać metodę
createMessageChannel()
, podając proces roboczy będący odbiorcą.
// In the sending worker swf
var sendChannel:MessageChannel;
sendChannel = Worker.current.createMessageChannel(receivingWorker);
Oba procesy robocze muszą mieć dostęp do obiektu MessageChannel. Najprostszym sposobem jest przekazanie obiektu MessageChannel za pomocą metody
setSharedProperty()
.
receivingWorker.setSharedProperty("incomingChannel", sendChannel);
W odbierającym procesie roboczym należy zarejestrować detektor zdarzeń
channelMessage
obiektu MessageChannel. Zdarzenie jest wysyłane, gdy wysyłający proces roboczy wysyła dane za pomocą kanału komunikatów.
// In the receiving worker swf
var incomingChannel:MessageChannel;
incomingChannel = Worker.current.getSharedProperty("incomingChannel");
incomingChannel.addEventListener(Event.CHANNEL_MESSAGE, handleIncomingMessage);
Aby wysłać dane, w wysyłającym procesie roboczym należy wywołać metodę
send()
obiektu MessageChannel.
// In the sending worker swf
sendChannel.send("This is a message");
W odbierającym procesie roboczym obiekt MessageChannel wywołuje moduł obsługi zdarzeń
channelMessage
. Następnie, aby otrzymać dane, odbierający proces roboczy wywołuje metodę
receive()
obiektu MessageChannel.
private function handleIncomingMessage(event:Event):void
{
var message:String = incomingChannel.receive() as String;
}
Obiekt zwracany przez metodę odbierającą musi być tego samego typu, co obiekt przekazany do metody
send()
. Odbierany obiekt jest kopią obiektu przekazanego przez nadawcę, a nie odniesieniem do obiektu istniejącego u nadawcy. Nie dotyczy to kilku typów danych opisanych w rozdziale
Odniesienia współużytkowane i wartości kopiowane
.