考虑(其中queue
是asyncio.Queue
,并且我使用asyncio websockets库,该库在标准库中使用与asyncio
相同的服务器接口):
async def handler(websocket: websockets.WebSocketServerProtocol, path):
while True:
data = await queue.get()
await websocket.send(data)
我发现的是ConnectionClosed
异常(当客户端断开连接并且也用于服务器关闭时触发)只会在我们等待{{ {1}}。在websocket客户端断开连接后,这可能会发生长,因为我们将花费大部分时间等待send()
。
此外,我试图实现服务器的正常关闭。该代码看起来非常类似于标准
queue.get()
问题是我的websocket处理程序,即server.close()
loop.run_until_complete(server.wait_closed())
仍然继续在handler()
上等待更多数据,然后提出queue
对事件循环的异常。
我的问题:引入wait_closed()
使wait_for()
功能更能响应这些管理事件是否正确:
handler()
我在网上发现的大部分asyncio示例都非常简单,似乎并没有涵盖这些问题。
我可以在我的关机序列期间将垃圾放入队列,这将允许引发异常,但这不会有助于早先断开客户端连接。
非常感谢任何带有示例的好参考。我发现官方的asyncio文档有些简洁。