FastAPI websocket 无法连接
FastAPI websocket can not connect
我正在尝试让我的 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 代码似乎无法在我的计算机上运行很奇怪,有人知道为什么吗?
提前致谢!
显然,WebSocket 功能是在刚刚发布的 FastAPI 0.24 中添加的。我使用的是旧版本。
运行 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...")
我正在尝试让我的 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 代码似乎无法在我的计算机上运行很奇怪,有人知道为什么吗?
提前致谢!
显然,WebSocket 功能是在刚刚发布的 FastAPI 0.24 中添加的。我使用的是旧版本。
运行 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...")