如何在 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-redis 和 RedisToGo 在 Heroku 上扩展到 2+ dynos