【发布时间】:2022-06-11 05:56:52
【问题描述】:
所以,我有这个:
my $conn = await IO::Socket::Async.connect('127.0.0.1', 12340);
$conn.print: "GET /rest HTTP/1.1\r\n\r\n";
如何只接收来自服务器的第一行?
我可以使用whenever 并在其中添加一些逻辑,但有更简单的方法,对吧?
【问题讨论】:
标签: raku
所以,我有这个:
my $conn = await IO::Socket::Async.connect('127.0.0.1', 12340);
$conn.print: "GET /rest HTTP/1.1\r\n\r\n";
如何只接收来自服务器的第一行?
我可以使用whenever 并在其中添加一些逻辑,但有更简单的方法,对吧?
【问题讨论】:
标签: raku
如果你真的只想要第一行,而不关心响应的其余部分,那么你可以这样做:
my $first-line = await $conn.Supply.lines.first;
也就是说,获取代表响应流的Supply,将其拆分为多行(这导致Supply 行),然后获取到达的第一行。超过第一行接收到的任何数据都将被丢弃。
IO::Socket::Async 在数据包到达时提供数据包。它不涉及提供面向行的接口;如果一个协议真的像逐行读取一样简单,那么react whenever $coon.Supply.lines -> $line { } 会做到这一点(并正确处理拆分数据包的行)。
【讨论】: