【发布时间】:2021-05-19 04:48:08
【问题描述】:
我在 GKE 中部署了一个基于 Socket.io 的应用。我已经使用 Redis 适配器来处理多个 pod。 Ingress 设置中已设置 Cookie 关联性。
我使用动态命名空间。我在 GKE 上只使用 1 个 POD。当我从 1 个 pod 扩展到 0 个 pod,然后再次扩展到 1 个 pod 时,反复进行,有时 socket.io 工作,有时它不起作用。当它不起作用时,这是我观察到的非常奇怪的行为:
- 服务器端的连接事件未触发,尽管套接字已经连接。我知道套接字已经连接,因为我打印了所有这些。
我怀疑 Redis 适配器?有人见过这个吗?
谢谢!
【问题讨论】:
-
嗨,您能否添加您的问题的minimal, reproducible example 以用于复制目的?另外,您能否具体说明一下您的意思:
socket.io有时有效,有时无效? -
谢谢,我找到了问题。这是因为动态命名空间。问题是,当您使用
io.of(nsp)时,如果尚未创建nsp,它将在连接处理程序上使用undefine创建。因此,我们的连接处理程序上的动态命名空间没有设置 -
很高兴您找到了问题的解决方案。由于您是它的创始人,请考虑创建一个带有解释的答案,以便更好地向社区展示并表明您已设法解决它。
标签: node.js socket.io google-kubernetes-engine socket.io-redis