我正在用 parslet 编写一个 HTTP/1 响应解析器。它有效,但只有当我发送完整的有效载荷时。
我有这样的东西:
rule(:response) {
response_line >> crlf >>
header.repeat.as(:headers) >> crlf >>
data.as(:data)
}
root :response
但是如果我传递一个不完整的有效载荷,我会得到:
parser.parse("HTTP/1.1 200 OK\r\n")
#=> Parslet::ParseFailed: Failed to match sequence (RESPONSE_LINE CRLF headers:(HEADER{0, }) CRLF data:DATA) at line 1 char 16.
我希望能够在不失败的情况下向解析器提供字节,至少如果它们不违反预期的话。有没有办法以某种方式“缓冲”直到违反某些规则或满足所有期望?