我正在尝试解析来自 HTTP 查询的结果,这些查询最多可以返回数百万行——每行都需要解析。理想情况下,我希望一次从连接中读取一行并在进行时对其进行解析 - 所以基本上是一个 FileHandle-esque 迭代器,但现有的 HTTP 库似乎都可以一次获取所有内容,尽管可以 a) 保存到一个文件,或者 b) 使用代码 ref 处理块。A 并不理想,因为它是一个两遍解决方案(数据传输后需要逐行读取文件,并且可能会占用存储空间,这可能是不必要的)。B 并不理想,因为希望能够返回每一行,而不是在代码引用中处理它,而且块不是一行,因此 LWP 解决方案不会从 LWP 行重构中受益。我知道有非阻塞解决方案(使用 AnyEvent 和 Coro),但这些似乎对非阻塞性而不是逐行处理更感兴趣。任何人都可以在这里指出一个好的方向,还是我在吠叫错误的树?
问问题
193 次
2 回答
0
看看在纯 Perl 中从另一个 HTTP 资源流式传输的最简单方法是什么? 我自己没有使用过 HTTP::Lite,但它似乎支持基于回调的接收数据处理,所以这应该适合你。
于 2011-04-08T13:42:16.477 回答
0
回调可以让你做任何你想做的事情。您可以这样做,以便在获取输入时缓冲输入并从缓冲区中读取行。Perl 允许您在几乎任何东西上打开文件句柄(使用tie
),包括字符串(使用open
)。您可能会发现的任何其他内容最终都会收到一个块并将其转换为行。
于 2011-04-08T15:54:58.467 回答