小编Zar*_*uan的帖子

Perl6 IO :: Socket :: Async截断数据

我正在使用IO :: Socket :: Async在P6中重写我的P5套接字服务器,但收到的数据在结尾处被截断1个字符,并且在下一个连接上收到1个字符.来自Perl6 Facebook组的人(Jonathan Worthington)指出,这可能是由于字符串的性质和字节在P6中的处理方式截然不同.引:

在Perl 6中,字符串和字节的处理方式截然不同.值得注意的是,字符串在字形级别上起作用.接收Unicode数据时,不仅可能将多字节序列分组,还可以分割多码点序列.例如,一个数据包的末尾可能包含字母"a",而下一个数据包可能是组合的重音符号.因此,它不能安全地传递"a",直到看到下一个数据包如何开始.

我的P6正在MoarVM上运行

https://pastebin.com/Vr8wqyVu

use Data::Dump;
use experimental :pack;

my $socket = IO::Socket::Async.listen('0.0.0.0', 7000);

react {
    whenever $socket -> $conn {
        my $line = '';
        whenever $conn {

            say "Received --> "~$_;
            $conn.print: &translate($_) if $_.chars ge 100;  
            $conn.close;              

        }
    }
    CATCH {
        default {
            say .^name, ': ', .Str;
            say "handled in $?LINE";
        }
    }
}

sub translate($raw) {

    my $rawdata = $raw;
    $raw ~~ s/^\s+|\s+$//; # remove heading/trailing whitespace

    my $minus_checksum …
Run Code Online (Sandbox Code Playgroud)

perl6 io-socket moarvm

12
推荐指数
1
解决办法
181
查看次数

Perl6将正则表达式匹配组分配给变量

在P5中,我能够做到这样的事情

my ($var1, $var2, $var3) = $string =~ /(.+)\s(.+)\s(.+)/;

我如何在Perl 6中做同样的事情?如果我使用相同的语法,$ var1将保存整个$ string值.

regex perl6

6
推荐指数
2
解决办法
129
查看次数

在询问输出时,Perl6 Redis卡住了

由于某些未知原因(甚至在Redis日志中),这段代码将永远停留...请帮助..

use v6;
use Redis;

my $redis = Redis.new("127.0.0.1:6379");
$redis.auth("xxxxxxxxx");
$redis.set("key", "value");
say $redis.get("key");
say $redis.info();
$redis.quit();
Run Code Online (Sandbox Code Playgroud)

perl6 redis

6
推荐指数
1
解决办法
111
查看次数

MOAR进程在运行Perl6套接字服务器时膨胀

我有一个使用IO :: Socket :: Async和Redis :: Async进行消息发布的套接字服务器.只要服务器收到消息,脚本就会转换消息并生成确认消息以发送回发送方,以便发送方发送后续消息.由于翻译消息非常昂贵,因此脚本将在"start"方法下运行该部分.但是,我注意到Moar进程正在运行我的RAM.有什么想法我应该在哪里解决这个问题?谢谢!

https://pastebin.com/ySsQsMFH

use v6;
use Data::Dump;
use experimental :pack;
use JSON::Tiny;
use Redis::Async;

constant $SOCKET_PORT = 7000;
constant $SOCKET_ADDR = '0.0.0.0';
constant $REDIS_PORT = 6379;
constant $REDIS_ADDR = '127.0.0.1';
constant $REDIS_AUTH = 'xxxxxxxx';


constant $IDLING_PERIOD_MIN = 180 - 2; # 3 minutes - 2 secs
constant $CACHE_EXPIRE_IN = 86400; # 24h hours

# create socket
my $socket = IO::Socket::Async.listen($SOCKET_ADDR, $SOCKET_PORT);

# connnect to Redis ...
my $redis;
try {
    my $error-code = "110";
    $redis …
Run Code Online (Sandbox Code Playgroud)

asynchronous perl6 io-socket moarvm

5
推荐指数
1
解决办法
101
查看次数

标签 统计

perl6 ×4

io-socket ×2

moarvm ×2

asynchronous ×1

redis ×1

regex ×1