如何在 restify 上扩展 socket.io?

Posted

技术标签:

【中文标题】如何在 restify 上扩展 socket.io?【英文标题】:How to scale socket.io on restify? 【发布时间】:2016-01-03 22:23:17 【问题描述】:

我正在尝试扩展在 restify 上运行的 socket.io。我能够将其设置为在一个 nodejs 实例上运行良好。现在,当我将我的应用扩展到四个实例时,应用生态系统崩溃了(即,事件未在客户端之间正确同步)。

我正在寻找有关如何使用 restify 设置粘性会话的示例。或者,现在是怎么做的?

粘性会话的更新是一年前的:Socket 1.0 Update / Scalability。

我找到了这两个关于设置的博客,但它们都使用 Express 并且也是一年多前写的:

Article 1 Article 2

由于我正在制作无头 API,我认为不应使用 Express。这是推荐的思维方式还是我应该只使用 Express?

package.json:

  "dependencies": 
    "hiredis": "^0.4.1",
    "pouchdb": "^4.0.3",
    "pouchdb-upsert": "^1.1.3",
    "redis": "^2.0.1",
    "restify": "^4.0.0",
    "socket.io": "^1.3.7"
  

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

Socket.io 只会让您的服务器 客户端数据在单个实例中同步,因为 Node 是单线程的并且存在于单个 CPU 内核上。要同步多个实例,您需要更高级别的消息管理方法。 Socket.io 推荐一个 Redis 实例。还有这个 repo:http://socketcluster.io 为您处理相同的问题。

【讨论】:

以上是关于如何在 restify 上扩展 socket.io?的主要内容,如果未能解决你的问题,请参考以下文章

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

Socket.io 命名空间限制以及如何扩展它

使用 socket.io-redis 和 RedisToGo 在 Heroku 上扩展到 2+ dynos

使用 Redis 扩展 Socket.IO,然后扩展 Redis 本身

socket.io 的可扩展架构

与 socket.io 相关的可扩展性问题