为什么WebSocket与aiohtp服务器不工作

rvpgvaaj  于 2023-01-17  发布在  其他
关注(0)|答案(1)|浏览(167)

我试图理解WebSocket和aiohttp是如何工作的,所以我运行了来自docunentation www.example.com的以下代码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))

我用curl检验的结果是:

curl  http://0.0.0.0:8080/ws

我看到的信息是:

No WebSocket UPGRADE hdr: None
 Can "Upgrade" only to "WebSocket"

Firefox显示了相同的消息。
我做错什么了?也许有人知道问题出在哪里?

b1uwtaje

b1uwtaje1#

如果有人还不明白为什么不能用websocat测试上面给出的WebSocket示例,那么值得注意的是,当前版本(v1.11.0)通过

brew install websocat

这意味着localhost没有被正确解析。
如果你用127.0.0.1代替,它会工作得很好。例如:

websocat ws://127.0.0.1:8000/ws

相关问题