실제로 ReceivePort 당 여러 개의 SendPorts를 생성 할 수 있습니다.
기본적으로 격리 주체를 포함하는 격리자는 ReceivePort를 만들고 port
게터를 통해 사용할 수 있습니다. 이 ReceivePort는 spawnFunction()
및 spawnUri()
에서 반환 된 SendPort에 연결됩니다. 그러나 new ReceivePort()
으로 새 ReceivePort를 만들면 toSendPort()
을 통해 원하는 수만큼 연결된 SendPorts를 만들 수 있습니다. 그들을 사용하기 위하여 당신은 당신이 spawnFunction()
에서 또는 ReceivePort.receive()
를 통해 얻은 원래 SendPort에 메시지와 함께 새로운 SendPort 자체를 보낸다.
이렇게하면 두 격리 지점 사이에 여러 "채널"을 설정할 수 있습니다. 아직 실제로 어떻게 작동하는지 아직 보지 못했지만 하나의 SendPort에서 구조화 된 메시지를 통해 채널을 멀티플렉싱하고 있습니다.
격리 된 곳에서 ReceivePort를 만들 수 있습니다 : 부모 격리 또는 자식 격리. 그러므로 분파자가 2 개의 SendPorts를 자식에게 보내려면 spawnFunction()
에서 하나를 필요로하고 다른 하나는 메시지에서 자식으로부터 부모로 다시 전달해야합니다.
다음은 여러 개의 SendPorts를 사용하도록 변경 한 예입니다. 단계 :
- 주 : 스폰 분리
- 주요 다음 분리 다시
- 에코 메시지를 보낼 수 있도록 SendPort있는 메시지를 보내기 다음 분리
- 에코에 두 번째 ReceivePort 만들기 하십시오 ReplyTo의 SendPort
- 에코와 분리에 메시지가 나타납니다 ReceivePort에서 SendPort을 만들고 다시 보내
- 주 :
에코에서 메시지와 SendPort 수신
이제 main()에는 독립된 두 개의 SendPorts가 있습니다.
#import('dart:isolate');
echo() {
var port2 = new ReceivePort(); // 3
port2.receive((m, p) {
print("two: $m");
});
port.receive((m, p) { // 4
print("one: $m");
p.send("ack", port2.toSendPort()); // 5
});
}
main() {
port.receive((m, sendPort2) { // 6
sendPort2.send("hello 2");
});
var sendPort1 = spawnFunction(echo); // 1
sendPort1.send("hello 1", port.toSendPort()); // 2
}
이 인쇄 :
one: hello 1
two: hello 2
휴!
동일한 분리에서 두 SendPorts를 사용하는 위치를 명확히 할 수 있습니까? 'sendPort'를 클래스 나 함수가 고립시켜야 할 곳으로 전달할 수는 없습니까? –