在多个节点上部署 socket.io 应用程序

Posted

技术标签:

【中文标题】在多个节点上部署 socket.io 应用程序【英文标题】:Deploying a socket.io app in on multiple-nodes 【发布时间】:2014-10-24 04:09:19 【问题描述】:

我在 heroku 上有一个应用程序,它使用 socket.io 进行服务器-客户端通信。一切正常。但是,一旦我将我的应用程序扩展到超过 1 个 dyno,我就会收到几个 http 请求错误:

can't establish a connection to the server at wss://***/socket.io/?EIO=2&transport=websocket&sid=Hky6IHdckNADdU_tAACm. socket.io.js:4520 The connection to wss://***/socket.io/?EIO=2&transport=websocket&sid=Hky6IHdckNADdU_tAACm was interrupted while the page was loading. socket.io.js:4520 can't establish a connection to the server at wss://***/socket.io/?EIO=2&transport=websocket&sid=kWymv6ItJHBcUybZAAAA. socket.io.js:4520 The connection to wss://***/socket.io/?EIO=2&transport=websocket&sid=kWymv6ItJHBcUybZAAAA was interrupted while the page was loading. socket.io.js:4520

还有一大堆 HTTP status 400 code: 1, message: "Session ID unknown"

我的 socket.io 正在使用 redis 适配器,因此应该正确共享状态。我通过连接到 redis 并发出以下命令来验证这一点: PSUBSCRIBE socket.io#*

由于我可以看到数据传回并在此通道上强制执行,因此我假设我的 socket.io redis 适配器工作正常。

有人知道如何让 socket.io 在超过 1 个 dyno 的 heroku 上工作吗?

【问题讨论】:

【参考方案1】:

您需要粘性负载平衡。 Socket.io 有一篇很棒的文章,所以我将把它留给他们来解释这个话题:

https://socket.io/docs/using-multiple-nodes/

【讨论】:

以上是关于在多个节点上部署 socket.io 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

heroku 多个测功机 socket.io

尝试在 Heroku 上部署 Node.js/Express/Socket.io 应用程序时出现应用程序错误

Kubernetes 中的 Socket.IO 集群,多个节点未发送给所有客户端

在 Heroku 上使用集群和 socket.io-redis 扩展 node.js socket.io@1.*.*

通过socket.io连接到节点服务器的phonegap应用程序在浏览器上工作,但在应用程序中不工作

Node.js - 在同一个端口上使用 Socket.io 和 Express