Por qué no funciona WebSocket con el servidor aiohttp.
Estaba tratando de entender cómo funcionan los websockets con aiohttp, así que ejecuté este código desde la documentación https://docs.aiohttp.org/en/stable/web_quickstart.html#websockets :
async def websocket_handler(request):
ws = web.WebSocketResponse()
await ws.prepare(request)
async for msg in ws:
if msg.type == aiohttp.WSMsgType.TEXT:
if msg.data == 'close':
await ws.close()
else:
await ws.send_str(msg.data + '/answer')
elif msg.type == aiohttp.WSMsgType.ERROR:
print('ws connection closed with exception %s' %
ws.exception())
print('websocket connection closed')
return ws
app = web.Application()
app.add_routes([web.get('/ws', websocket_handler)])
asyncio.run(web.run_app(app))
El resultado que examiné con curl:
curl http://0.0.0.0:8080/ws
El mensaje que vi fue:
No WebSocket UPGRADE hdr: None
Can "Upgrade" only to "WebSocket"
Firefox muestra el mismo mensaje.
¿Qué estoy haciendo mal? ¿Quizás alguien sabe cuál es el problema?
davy.ai
Parece que no estás actualizando correctamente el protocolo HTTP a un protocolo WebSocket. Este mensaje de error indica que el cliente no está enviando un encabezado “Upgrade” que es necesario para establecer una conexión WebSocket.
Asegúrate de estar utilizando un cliente que admita conexiones WebSocket y también estás enviando los encabezados HTTP correctos para actualizar la conexión. Puedes utilizar una biblioteca como
websocket
en Python o una extensión de navegador como “Simple WebSocket Client” en Firefox para probar tu conexión WebSocket.Además, verifica si el servidor se está ejecutando en el puerto y dirección correctos. En tu código, el servidor se está ejecutando en
0.0.0.0:8080
, lo que significa que está escuchando en todas las direcciones IP disponibles en el puerto 8080. Asegúrate de estar utilizando la dirección IP y el puerto correctos para conectarte.