Python.readline()res

2024-04-25 18:03:37 发布

您现在位置:Python中文网/ 问答频道 /正文

在python3.4/Asyncio中,我使用StreamReader/Writer。在

要检测客户端断开连接,常见的方法似乎是从客户端读取数据,如果没有任何内容,则客户端断开连接。在

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。(检测客户端断开连接)


Tags: 方法fromclientasynciotrue客户端内容data
1条回答
网友
1楼 · 发布于 2024-04-25 18:03:37

我也有类似的问题。对我有效的方法是先检查EOF,如果为true,则引发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

希望有帮助。如果有更好的方法我会感兴趣的。在

相关问题 更多 >