Dart隔离是否可以有多个发送和接收端口?
是否可以在Dart中为同一隔离打开多个发送和接收端口 例如,以下代码示例将创建两个隔离,每个隔离都有自己的发送端口。但是,我想知道是否有任何方法可以为同一个隔离创建多个发送/接收端口,并选择将消息发送到的接收端口Dart隔离是否可以有多个发送和接收端口?,dart,dart-isolates,Dart,Dart Isolates,是否可以在Dart中为同一隔离打开多个发送和接收端口 例如,以下代码示例将创建两个隔离,每个隔离都有自己的发送端口。但是,我想知道是否有任何方法可以为同一个隔离创建多个发送/接收端口,并选择将消息发送到的接收端口 #import('dart:isolate'); echo() { } main() { var sendPort1 = spawnFunction(echo); var sendPort2 = spawnFunct
#import('dart:isolate');
echo() {
}
main() {
var sendPort1 = spawnFunction(echo);
var sendPort2 = spawnFunction(echo);
}
虽然我不确定是否有多个接收端口。您可以为每个接收端口创建多个发送端口。此功能内置于ReceivePort类中: 如帮助底部所示: 从同一个ReceivePort创建多个发送端口是合法的
希望这有帮助。虽然我不确定是否有多个接收端口。您可以为每个接收端口创建多个发送端口。此功能内置于ReceivePort类中: 如帮助底部所示: 从同一个ReceivePort创建多个发送端口是合法的
希望这能有所帮助。您实际上可以创建任意数量的ReceivePort,然后正如Matt所说,每个ReceivePort可以创建任意数量的发送端口 默认情况下,一个隔离(包括主隔离)创建了一个ReceivePort,并可通过
端口
getter使用。此接收端口连接到从spawnfort()
和spawnUri()
返回的发送端口。但是您可以使用new ReceivePort()
创建一个新的接收端口,然后您可以通过toSendPort()
创建任意数量的连接发送端口。要使用它们,您可以将新的发送端口本身与原始发送端口上的消息一起发送,这些消息可以从spawnFunction()
,也可以通过ReceivePort.receive()
通过这样做,您可以在两个隔离之间设置多个“通道”。我还没有玩过它来看看它在实践中是如何工作的,我一直在通过一个发送端口上的结构化消息多路复用通道
请注意,您可以在任何隔离中创建ReceivePort:父隔离或子隔离。因此,如果希望partent有两个到子级的发送端口,则需要一个来自spawnFunction()
的发送端口,另一个通过消息从子级传回父级
下面是更改为使用多个发送端口的示例。步骤如下:
#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
唷 实际上,您可以创建任意数量的接收端口,然后如Matt所说,每个接收端口可以创建任意数量的发送端口 默认情况下,一个隔离(包括主隔离)创建了一个ReceivePort,并可通过
端口
getter使用。此接收端口连接到从spawnfort()
和spawnUri()
返回的发送端口。但是您可以使用new ReceivePort()
创建一个新的接收端口,然后您可以通过toSendPort()
创建任意数量的连接发送端口。要使用它们,您可以将新的发送端口本身与原始发送端口上的消息一起发送,这些消息可以从spawnFunction()
,也可以通过ReceivePort.receive()
通过这样做,您可以在两个隔离之间设置多个“通道”。我还没有玩过它来看看它在实践中是如何工作的,我一直在通过一个发送端口上的结构化消息多路复用通道
请注意,您可以在任何隔离中创建ReceivePort:父隔离或子隔离。因此,如果希望partent有两个到子级的发送端口,则需要一个来自spawnFunction()
的发送端口,另一个通过消息从子级传回父级
下面是更改为使用多个发送端口的示例。步骤如下:
#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
唷 贾斯汀的回答基本上是正确的,但给我带来了一些麻烦,因为在执行步骤5后,隔离停止了响应。下面是一个在我的环境中实际起作用的更新版本:
导入“省道:隔离”;
回声(){
var port2=新接收端口();
端口2.接收((m,p){
印刷品(“两份:$m”);
});
接收端口((m,p){
印刷品(一张:$m);
p、 发送(port2.toSendPort());
});
}
main(){
var sendPort1=生成函数(echo);
sendPort1.call(“hello 1”)。然后((newPort)=>newPort.send(“hello 2”);
}
主要区别只是端口作为消息发送,而不是使用replyTo字段。由于不需要另一个接收端口,这也允许使用更紧凑的代码。Justin的回答基本正确,但给我带来了一些麻烦,因为在执行步骤5后,隔离停止响应。下面是一个在我的环境中实际起作用的更新版本:
导入“省道:隔离”;
回声(){
var port2=新接收端口();
端口2.接收((m,p){
印刷品(“两份:$m”);
});
接收端口((m,p){
印刷品(一张:$m);
p、 发送(port2.toSendPort());
});
}
main(){
var sendPort1=生成函数(echo);
sendPort1.call(“hello 1”)。然后((newPort)=>newPort.send(“hello 2”);
}
主要区别在于端口是作为消息发送的,而不是作为消息发送的