當我在去年問一個有關promise的問題時,我的echo服務器正在工作(請參閱此鏈接:perl6 how to get specific identity of promises?)。但是,在新版本的perl6中,我的回顯服務器不再工作。perl6從上一年的IO :: Socket :: INET中的更改和違反承諾
我想我可以嘗試從perl6文檔站點(https://docs.perl6.org/type/IO::Socket::INET)的例子,但我想知道我在我的代碼中犯了什麼錯誤。我目前的水平阻止了我看到我的代碼和perl6文檔站點上的代碼之間的差異。請給我一個提示;謝謝 !
my @result;
for 0 .. 2 -> $index {
@result[$index] = start {
my $myPromiseID = $index;
say "======> $myPromiseID\n";
my $rsSocket = IO::Socket::INET.new:
localhost => 'localhost',
localport => 1234 + $index,
listen => 1;
while $rsSocket.accept -> $rsConnection {
say "Promise $myPromiseID accepted connection";
while $rsConnection.recv -> $stuff {
say "Promise $myPromiseID Echoing $stuff";
$rsConnection.print($stuff);
}
$rsConnection.close;
}
}
}
await @result;
和錯誤消息是:
Tried to get the result of a broken Promise
in block <unit> at p6EchoMulti.pl line 24
Original exception:
Nothing given for new socket to connect or bind to
in block at p6EchoMulti.pl line 8
Actually thrown at:
in block at p6EchoMulti.pl line 13
謝謝你raiph!你已經多次幫助我了,如果我們在perl6會議上見面,我會給你買一杯咖啡.-) – lisprogtor
FWIW,我會將它歸類爲一個錯誤。簽名可能應該是'Bool(任何)',又名'將任意'對象強制轉換爲'Bool'。另一方面,只需指定':listen'就足夠了,因爲它與'listen = > True' –
@lisprogtor這是一個很好的評論。在這種情況下,我在睡覺之前就發現了你的問題。但是請知道,你的問題可能會在#perl6上更快和/或有幫助地得到解答,這是一個友好的頻道,您可以在這裏聊天聊天,看看日食或任何非常棒的食物。見https://perl6.org/community/irc或[只需點擊此處](http://webchat.freenode.net/?channels=perl6&nick=lisprogtor)並輸入「hi」。根據時間的不同,有些人可能會在幾分鐘內回覆,你可以分享一個虛擬的茶杯。 :) – raiph