python – 从asyncio StreamReader读取

我正在尝试扩展使用流式读写器(
code)的python asyncio HTTP服务器示例.如果我理解正确,示例处理程序从阅读器读取100个字节,并通过编写器将其回送给客户端.我试图读取超过100个字节…读取,直到没有什么比阅读更好了.

我试过让read()函数尽可能多地读取,

data = yield from reader.read()

但这似乎永远阻止了.所以我试着读取块直到达到EOF,

while not reader.at_eof():
    data += yield from reader.read(100)

虽然这会检索更多的数据,但它似乎阻止了读取调用而不是退出while循环.

如何使用流阅读器从客户端获取整个消息?

最佳答案 您应检查
StreamReader.read是否返回空字节对象以表示EOF:

data = bytearray()
while True:
    chunk = yield from reader.read(100)
    if not chunk:
        break
    data += chunk

另外,如果您需要功能齐全的HTTP客户端,请考虑使用aiohttp.

点赞