Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 简单无阻塞web服务器_Sockets_Raku - Fatal编程技术网

Sockets 简单无阻塞web服务器

Sockets 简单无阻塞web服务器,sockets,raku,Sockets,Raku,我试图用Perl6制作一个简单的非阻塞web服务器,但很可能我不理解这里的某些内容 例子: #/usr/bin/env perl6 使用v6; 反应{ 每当IO::Socket::Async.listen('0.0.0.0',8080)->$conn时{ 只要$conn.Supply(:bin)->$buf{ 说“-”x70~“\n”~$buf.decode('UTF-8')。修剪尾随; 在这里睡觉 my$response=“HTTP/1.0 200 OK\x0D\x0A\x0D\x0A”; $

我试图用Perl6制作一个简单的非阻塞web服务器,但很可能我不理解这里的某些内容

例子:
#/usr/bin/env perl6
使用v6;
反应{
每当IO::Socket::Async.listen('0.0.0.0',8080)->$conn时{
只要$conn.Supply(:bin)->$buf{
说“-”x70~“\n”~$buf.decode('UTF-8')。修剪尾随;
在这里睡觉
my$response=“HTTP/1.0 200 OK\x0D\x0A\x0D\x0A”;
$response~=q:to/END/;
演示页
标题在这里
同侧叶

结束 wait$conn.write:$response.encode('utf-8'); $conn.close(); } } }
这里的示例与文档中的通用示例几乎相同

问题:
为什么页面不是并行的,而是按顺序为所有客户端服务?

回答我自己的问题。我是perl6的初学者,所以如果我在这里做了一些奇怪的事情,请纠正我

使用承诺似乎可以解决这个问题。我之前假设IO::Socket::Async将为我创建承诺,请求将由模块并行处理

#/usr/bin/env perl6
使用v6;
我的承诺;
反应{
每当IO::Socket::Async.listen('0.0.0.0',8080)->$conn时{
只要$conn.Supply(:bin)->$buf{
我的$promise=开始{
说“-”x70~“\n”~$buf.decode('UTF-8')。修剪尾随;
睡眠5;
my$response=“HTTP/1.0 200 OK\x0D\x0A\x0D\x0A”;
$response~=q:to/END/;
演示页
标题在这里
同侧叶

结束 wait$conn.write:$response.encode('utf-8'); $conn.close(); }; 推送@promises,$promise; } } } 等待承诺;
Hi tojo,你能描述一下这将实现什么吗?我正在这里尝试你的代码。请求到达循环,但什么也没发生。我让它工作了。出于某种原因,它一直在抛出异常,但后来我改变了端口,它成功了。