为什么socketio可以使用polling,而不能使用kubernetes上的WebSocket

hmtdttj4  于 2023-10-20  发布在  Kubernetes
关注(0)|答案(1)|浏览(134)

我正在尝试将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连接时,我在后端看不到任何日志

o75abkj4

o75abkj41#

别介意,总是和venv的人一起工作!如果有人遇到同样的问题,对我来说,在需求文件中添加“WebSocket”可以解决这个问题。(fastapi-socketio不包括这个库)

相关问题