Should `WebSocketConnection` be an asynchronous iterator?
The connection object could be an iterator that yields incoming messages, i.e. as an alternative to calling get_message().
# simple WebSocket echo
async with open_websocket(…) as websocket:
async for message in websocket:
await websocket.send(message)
Thoughts?
Note: Aaugustin's Websockets has async iterable connection objects: https://websockets.readthedocs.io/en/stable/api.html#module-websockets.protocol
On Python ≥ 3.6, WebSocketCommonProtocol instances support asynchronous iteration:
async for message in websocket: await process(message)The iterator yields incoming messages. It exits normally when the connection is closed with the status >code 1000 (OK) or 1001 (going away). It raises a ConnectionClosed exception when the connection is >closed with any other status code.
Raising only on connection error sounds good
Yes I think it's nice idea, websockets impl is here, very simple ?
https://github.com/aaugustin/websockets/blob/13eff12bb4c995b50154fdc250281c92ddccaca0/src/websockets/legacy/protocol.py#L469
Also it seems aaugustin is moving his implementation to have a sans-io base, just for FYI
Oh cool, I like aaugustin’s library, nice to hear that it is adopting sans io. This library here is not maintained anymore (I’ve changed jobs twice since I wrote it) so it would be great to have an async library with an active maintainer.