es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , ,

Answer

  1. Avatar for 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.

Comments are closed.