我正在尝试将一个websocket aiohttp客户端连接到fastapi websocket终端,但是似乎在连接到终端后立即关闭了websocket,因此我无法发送或接收任何数据。
服务器
import uvicorn
from fastapi import FastAPI, WebSocket
app = FastAPI()
@app.websocket('/ws')
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
...
if __name__ == '__main__':
uvicorn.run('test:app', debug=True, reload=True)
客户端
import aiohttp
import asyncio
async def main():
s = aiohttp.ClientSession()
ws = await s.ws_connect('ws://localhost:8000/ws')
while True:
...
asyncio.run(main())
当我尝试在建立连接时将数据从服务器发送到客户端
服务器
@app.websocket('/ws')
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
await websocket.send_text('yo')
客户端
while True:
print(await ws.receive())
我总是被打印在客户端控制台中
WSMessage(type=<WSMsgType.CLOSED: 257>, data=None, extra=None)
在服务器的调试控制台中显示
INFO: ('127.0.0.1', 59792) - "WebSocket /ws" [accepted]
INFO: connection open
INFO: connection closed
当我试图从客户端向服务器发送数据时
服务器
@app.websocket('/ws')
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
while True:
await websocket.receive_text()
客户端
ws = await s.ws_connect('ws://localhost:8000/ws')
await ws.send_str('client!')
什么都没发生,服务器的控制台没有打印出任何消息,只有调试信息显示客户端已被接受,连接已打开并再次关闭。
我不知道我做错了什么,我按照fastAPI文档中关于websocket的这个教程进行操作,其中js websocket的示例完全正常。