En meddelandekanel är en envägslänk för att skicka data mellan två arbetare. Det finns en viktig fördel med att använda ett MessageChannel-objekt för att skicka data mellan arbetare. När du skickar ett meddelande (ett objekt) med en meddelandekanal kommer MessageChannel-objektet att skicka en
channelMessage
-händelse. Kod i den mottagande arbetaren kan avlyssna den händelsen för att veta när data är tillgängligt. Detta innebär att den mottagande arbetaren inte kontinuerligt behöver kontrollera om det finns datauppdateringar.
En meddelandekanal är associerad med endast två arbetare, en avsändare och en mottagare. Om du vill skapa ett MessageChannel-objekt, anropar du Worker-objektets
createMessageChannel()
-metod, genom att skicka den mottagande arbetaren som ett argument:
// In the sending worker swf
var sendChannel:MessageChannel;
sendChannel = Worker.current.createMessageChannel(receivingWorker);
Båda arbetarna måste ha åtkomst till MessageChannel-objektet. Det enklaste sättet att göra detta att skicka MessageChannel-objektet med metoden
setSharedProperty()
:
receivingWorker.setSharedProperty("incomingChannel", sendChannel);
Registrera i den mottagande arbetaren en avlyssnare för MessageChannel-objektets
channelMessage
-händelse. Denna händelse skickas när den avsändande arbetaren skickar data genom meddelandekanalen.
// In the receiving worker swf
var incomingChannel:MessageChannel;
incomingChannel = Worker.current.getSharedProperty("incomingChannel");
incomingChannel.addEventListener(Event.CHANNEL_MESSAGE, handleIncomingMessage);
För att faktiskt kunna skicka data ska du i den avsändande arbetaren anropa MessageChannel-objektets
send()
metod:
// In the sending worker swf
sendChannel.send("This is a message");
I den mottagande arbetaren anropar MessageChannel händelsehanteraren för
channelMessage
. Den mottagande arbetaren kan sedan hämta data genom att anropa MessageChannel-objektets
receive()
-metod.
private function handleIncomingMessage(event:Event):void
{
var message:String = incomingChannel.receive() as String;
}
Objektet som returneras av metoden receive har samma datatyp som objektet som skickas till metoden
send()
. Det mottagna objektet är en kopia av objektet som skickades av avsändaren och inte en referens till objektet i den avsändande arbetaren, såvida det inte tillhör någon av de få datatyperna som beskrivs i
Delade referenser och kopierade värden
.