【问题标题】:socket io connected without on connection event on server side (GKE)在服务器端(GKE)没有连接事件的套接字 io 连接
【发布时间】: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


【解决方案1】:

将此答案发布为社区 wiki,以强调问题已得到解决。

随意编辑和扩展。


如 cmets 中所述:

谢谢,我找到了问题。这是因为动态命名空间。问题是,当您使用io.of(nsp) 时,如果尚未创建nsp,它将使用连接处理程序上的undefine 创建。因此,未设置连接处理程序上的动态命名空间。


其他资源:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 2014-02-26
    相关资源
    最近更新 更多