Een MessageChannel-object biedt een methode om gegevens in één richting door te geven tussen twee workers. Het gebruik van een MessageChannel-object voor het doorgeven van gegevens biedt één groot voordeel. Wanneer u een bericht (een object) verzendt via een berichtenkanaal, wordt een
channelMessage
-gebeurtenis verzonden door het MessageChannel-object. De code in de ontvangende worker kan naar die gebeurtenis luisteren om erachter te komen wanneer er gegevens beschikbaar zijn. Op deze manier hoeft de ontvangende worker niet telkens te controleren of de gegevens zijn bijgewerkt.
Een berichtenkanaal vormt een koppeling tussen maximaal twee workers, een zender en een ontvanger. Als u een MessageChannel-object wilt maken, roept u de methode
createMessageChannel()
van het Worker-object van de verzendende worker aan. Hierbij geeft u de ontvangende worker door als argument:
// In the sending worker swf
var sendChannel:MessageChannel;
sendChannel = Worker.current.createMessageChannel(receivingWorker);
Beide workers moeten toegang hebben tot het MessageChannel-object. De eenvoudigste manier om dit te bereiken is het MessageChannel-object doorgeven via de methode
setSharedProperty()
:
receivingWorker.setSharedProperty("incomingChannel", sendChannel);
In de ontvangende worker registreert u een listener voor de gebeurtenis
channelMessage
van het MessageChannel-object. Deze gebeurtenis wordt verzonden wanneer de verzendende worker gegevens verstuurt via het berichtenkanaal.
// In the receiving worker swf
var incomingChannel:MessageChannel;
incomingChannel = Worker.current.getSharedProperty("incomingChannel");
incomingChannel.addEventListener(Event.CHANNEL_MESSAGE, handleIncomingMessage);
Als u ook daadwerkelijk gegevens wilt verzenden, roept u in de verzendende worker de methode
send()
van het MessageChannel-object aan:
// In the sending worker swf
sendChannel.send("This is a message");
In de ontvangende worker wordt de
channelMessage
-gebeurtenishandler aangeroepen door het MessageChannel-object. Vervolgens kan de ontvangende worker de gegevens ophalen door de methode
receive()
van het MessageChannel-object aan te roepen.
private function handleIncomingMessage(event:Event):void
{
var message:String = incomingChannel.receive() as String;
}
Het object dat door de receive-methode wordt geretourneerd is van hetzelfde gegevenstype als het object dat werd doorgegeven aan de
send()
-methode. Het ontvangen object is een kopie van het object dat werd doorgegeven door de verzendende worker. Het is dus geen referentie naar het object in de verzendende worker, tenzij het gaat om een van de weinige gegevenstypen die worden beschreven in
Gedeelde referenties en gekopieerde waarden
.