aio-libs / aio-libs/aiohttp

ClientWebSocketResponse: Add way to get close message when using msg iterator

Abierto
#7,682 1 comentario 0 reacciones 0 asignados Ver en GitHub
enhancement
Lenguaje dominante
Python
Estrellas
16.5k
Forks
2.4k
Merge medio
17 h 22 min
PR fusionados (30 d)
212

Descripción

### Is your feature request related to a problem?

The websocket server I'm connecting to will send a close message. I want to get this message.

There doesn't seem to a way to do this when using the async message iterator on ClientWebSocketResponse:

e.g.

async with session.ws_connect('http://example.org/ws') as ws:
async for msg in ws:
if msg.type == aiohttp.WSMsgType.TEXT:
await ws.send_str(msg.data + '/answer')
elif msg.type == aiohttp.WSMsgType.ERROR:
break
# No way to get close message here

### Describe the solution you'd like

There should be a `ClientWebSocketResponse.close_message` property that is set when the server has sent a close message

### Describe alternatives you've considered

As a workaround, I'm using the `ClientWebSocketResponse.receive()` method instead of async message iterator. Then I'm able to handle the close message my self. E.g.:

close_msg = None
async with session.ws_connect('http://example.org/ws') as ws:
while True:
msg = await ws.receive()
if msg.type == aiohttp.WSMsgType.TEXT:
await ws.send_str(msg.data + '/answer')
elif msg.type == aiohttp.WSMsgType.ERROR:
break
elif msg.type == WSMsgType.CLOSE:
close_msg = msg.extra
break
logger.info(f"Closed: {ws.close_code} {close_msg}")

### Related component

Client

### Additional context

_No response_

### Code of Conduct

- [X] I agree to follow the aio-libs Code of Conduct

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.