我正在尝试将WebSocket添加到我在kubernetes上运行的Web应用程序中。我使用python,fastapi作为服务器,next.js作为客户端,并试图使用fastapi-socketio和socketio添加WebSocket。
前端代码:(我在部署到k8s时将其更改为wss..)
Const socket = io('ws://localhost:8000', {
path: "/ws",
transports: ['websocket'],
retries: 1,
reconnection: false,
});
后端MySocketClass.py(cors列表是空的,因为我允许所有的起源在app.py与建议的方式这样做与fastapi,当我在这里再次指定起源它导致了多个标题的错误)
from fastapi_socketio import SocketManager
Class MySocketManager:
sm_clients = {}
def __init__(self, app, mount_route):
self.sm = SocketManager(app=app, mount_location=mount_route, socketio_path="", cors_allowed_origin=[])
...
后台代码app.py:
app = FastApi()
@app.on_event("startup")
async def startup_event:
app.state.socketClass = MySocketManager(app=app, mount_route="/ws")
在本地我的计算机上,我能够建立连接,但当部署到k8s时,我得到了一个错误“连接失败”。如果我尝试使用轮询而不是WebSocket作为传输方法进行连接,它可以在k8上工作。
有什么建议可以解决吗?
我一直在尝试所有推荐的注解和配置的入口以及我的后端pod和没有工作。
我还试图降级的版本,以匹配一个作为socketio的文档说。
此外,我将服务更改为NodePort以进行调试,并尝试从本地运行的前端连接,但在这两种情况下(作为NodePort和作为DataIp),当尝试使用WebSocket连接时,我在后端看不到任何日志
1条答案
按热度按时间o75abkj41#
别介意,总是和venv的人一起工作!如果有人遇到同样的问题,对我来说,在需求文件中添加“WebSocket”可以解决这个问题。(fastapi-socketio不包括这个库)