Python.readline()重置
在Python3.4/Asyncio中,我使用的是StreamReader/Writer 要检测客户端断开连接,常用的方法似乎是从客户端读取数据,如果没有数据,则客户端断开连接Python.readline()重置,python,python-3.x,python-asyncio,Python,Python 3.x,Python Asyncio,在Python3.4/Asyncio中,我使用的是StreamReader/Writer 要检测客户端断开连接,常用的方法似乎是从客户端读取数据,如果没有数据,则客户端断开连接 while True: data = (yield from asyncio.wait_for(client_reader.readline(), timeout=1.0)) if not data: #client disconnec
while True:
data = (yield from asyncio.wait_for(client_reader.readline(),
timeout=1.0))
if not data: #client disconnected
break
无论从客户端头读取的行数有多快(它会移动到每个循环的下一行),如果没有从客户端发送额外的行(在我的情况下,客户端不只是发送侦听),您都会到达超时
我想做的是反复阅读标题的第一行。。或者甚至可能只是第一行的第一个字符,或者如果不可能,当它到达最后一行时,循环回到第一行
完成这项任务的最佳/最优雅的方式是什么?3.4/Asyncio/StreamReader/Writer。(检测客户端断开连接)我遇到了类似的问题。我的工作方式是先检查EOF,然后在为真时引发ConnectionError异常。因此,对于您的代码,我将添加以下内容:
while True:
try:
if client_reader.at_eof():
raise ConnectionError
data = (yield from asyncio.wait_for(client_reader.readline(),
timeout=1.0))
if not data: #client disconnected
break
except ConnectionError:
break
except:
break # This is here to catch things like the asyncio futures timeout exception
希望有帮助。如果有人有更好的方法,我会感兴趣的 我认为问题不是特定于asyncio的,可能需要更改客户端代码。在没有异步IO的情况下,“一般”如何解决?