我正在尝试编写在 Promise 中运行的 3 个 echo 服务器的代码,但我想知道哪个 Promise 正在执行回显。有没有办法做到这一点?
no strict;
for 0 .. 2 -> $index {
@result[$index] = start {
$myID = $index;
say "======> $myID\n";
my $rsSocket = IO::Socket::INET.new:
localhost => 'localhost',
localport => 1234 + $index,
listen => 1;
while $rsSocket.accept -> $rsConnection {
say "Promise $myID accepted connection";
while $rsConnection.recv -> $stuff {
say "promise $myID Echoing $stuff";
$rsConnection.print($stuff);
}
$rsConnection.close;
}
}
}
await @result;
echo 服务器运行正常;用“nc”进行测试;
问题是$myID
变成2
创建 Promise 后,我无法判断哪个 Promise 正在执行当前的回显。看起来$myID
被所有的promise使用;有没有办法创建特定于个人承诺的变量?
这是你“失去”的事情之一no strict
.
您需要的是词法范围。使用my
每次块都会给你一个不同的变量({ ... }
)被输入。
如果你这样做:
for 0 .. 2 -> $index {
@result[$index] = start {
my $myID = $index;
Then $myID
将是本地的start
块,每次调用该块时,它都会记住它的 id。因此,每当套接字接收数据时,您都会获得正确的 ID。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)