首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FastAPI/Starlette websocket.close()不接受“原因”论证

FastAPI/Starlette websocket.close()不接受“原因”论证
EN

Stack Overflow用户
提问于 2022-06-19 10:46:27
回答 1查看 365关注 0票数 2

我需要断开传入的WebSocket连接,以防用户已经与服务器进行了活动连接,为此,我正在按照Starlette文档中的建议调用服务器。然而,当我调用以下内容时:

代码语言:javascript
复制
await websocket.close(code=1000, reason='Connection refused as session already exists for user')

服务器使用以下堆栈跟踪崩溃,上面写着unexpected keyword argument 'reason'

代码语言:javascript
复制
app_1     | Traceback (most recent call last):
app_1     |   File "/usr/local/lib/python3.10/site-packages/uvicorn/protocols/websockets/websockets_impl.py", line 184, in run_asgi
app_1     |     result = await self.app(self.scope, self.asgi_receive, self.asgi_send)
app_1     |   File "/usr/local/lib/python3.10/site-packages/uvicorn/middleware/proxy_headers.py", line 75, in __call__
app_1     |     return await self.app(scope, receive, send)
app_1     |   File "/usr/local/lib/python3.10/site-packages/fastapi/applications.py", line 211, in __call__
app_1     |     await super().__call__(scope, receive, send)
app_1     |   File "/usr/local/lib/python3.10/site-packages/starlette/applications.py", line 112, in __call__
app_1     |     await self.middleware_stack(scope, receive, send)
app_1     |   File "/usr/local/lib/python3.10/site-packages/starlette/middleware/errors.py", line 146, in __call__
app_1     |     await self.app(scope, receive, send)
app_1     |   File "/usr/local/lib/python3.10/site-packages/starlette/middleware/base.py", line 22, in __call__
app_1     |     await self.app(scope, receive, send)
app_1     |   File "/usr/local/lib/python3.10/site-packages/starlette/middleware/cors.py", line 76, in __call__
app_1     |     await self.app(scope, receive, send)
app_1     |   File "/usr/local/lib/python3.10/site-packages/starlette/exceptions.py", line 58, in __call__
app_1     |     await self.app(scope, receive, send)
app_1     |   File "/usr/local/lib/python3.10/site-packages/starlette/routing.py", line 656, in __call__
app_1     |     await route.handle(scope, receive, send)
app_1     |   File "/usr/local/lib/python3.10/site-packages/starlette/routing.py", line 315, in handle
app_1     |     await self.app(scope, receive, send)
app_1     |   File "/usr/local/lib/python3.10/site-packages/starlette/routing.py", line 77, in app
app_1     |     await func(session)
app_1     |   File "/usr/local/lib/python3.10/site-packages/fastapi/routing.py", line 273, in app
app_1     |     await dependant.call(**values)
app_1     |   File "/app/code/./app/api/api_v1/ws/ws_manager.py", line 175, in websocket_endpoint
app_1     |     await manager.connect(user, websocket)
app_1     |   File "/app/code/./app/api/api_v1/ws/ws_manager.py", line 90, in connect
app_1     |     await websocket.close(code=1000, reason='Connection refused as session already exists for user')
app_1     | TypeError: WebSocket.close() got an unexpected keyword argument 'reason'

我需要让客户知道,由于特定的原因,连接被拒绝了。请告诉我我在这里做错了什么。

耽误您时间,实在对不起。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-19 11:07:35

我运行的是一个旧版本的FastAPI,它的close()不支持“理性”参数。将FastAPI升级到最新版本解决了这个问题,因为最近引入了“原因”论点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72676190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档