【问题标题】:How to receive just one line from an IO::Socket::Async in Raku?如何从 Raku 中的 IO::Socket::Async 仅接收一行?
【发布时间】: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


    【解决方案1】:

    如果你真的只想要第一行,而不关心响应的其余部分,那么你可以这样做:

    my $first-line = await $conn.Supply.lines.first;
    

    也就是说,获取代表响应流的Supply,将其拆分为多行(这导致Supply 行),然后获取到达的第一行。超过第一行接收到的任何数据都将被丢弃。

    IO::Socket::Async 在数据包到达时提供数据包。它不涉及提供面向行的接口;如果一个协议真的像逐行读取一样简单,那么react whenever $coon.Supply.lines -> $line { } 会做到这一点(并正确处理拆分数据包的行)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-11
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-04
      相关资源
      最近更新 更多