【问题标题】:FastAPI websocket can not connectFastAPI websocket无法连接
【发布时间】:2019-10-14 07:31:04
【问题描述】:

我正在尝试让我的 Vue.js 应用程序使用 websockets 与我的 FastAPI(基于 starlette)本地服务器进行通信。我尝试使用与他们的示例完全相同的代码:https://fastapi.tiangolo.com/tutorial/websockets/。但是发生了一些奇怪的事情,因为我的服务器无法启动原因:AttributeError: 'FastAPI' object has no attribute 'websocket'。这很奇怪,因为这个确切的代码是 FastAPI 的官方文档。
之后我使用了 Starlette 示例代码:https://www.starlette.io/websockets/。但是,当我尝试连接它时,FastApi 会打印到终端:WARNING: Invalid HTTP request received.
我尝试使用另一个客户端,简单 WebSocket 客户端:https://chrome.google.com/webstore/detail/simple-websocket-client/pfdhoblngboilpfeibdedpjgfnlcodoo,但终端上出现相同的错误。
我在这里做错了什么?首先,我发现 FastAPI 代码似乎无法在我的计算机上运行很奇怪,有人知道为什么吗?

提前致谢!

【问题讨论】:

    标签: python python-3.x websocket starlette fastapi


    【解决方案1】:

    显然,WebSocket 功能是在刚刚发布的 FastAPI 0.24 中添加的。我使用的是旧版本。

    【讨论】:

    【解决方案2】:

    运行pip install websockets并配置如下:

    from fastapi import FastAPI, WebSocket
    
    @app.websocket("/ws")
    async def send_data(websocket:WebSocket):
        print('CONNECTING...')
        await websocket.accept()
        while True:
            try:
                await websocket.receive_text()
                resp = {
                "message":"message from websocket"
                }
                await websocket.send_json(resp)
            except Exception as e:
                print(e)
                break
        print("CONNECTION DEAD...")
    

    【讨论】:

      猜你喜欢
      • 2015-11-10
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多