大佬教程收集整理的这篇文章主要介绍了node.js socket.io redis architecture – horizontal serverscaling socket connections?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在我的服务器上安装了以下程序:
> node.js v0.11.3-pre
>表达v3.3.4
> socket.io v0.9.14
> connect-redis v1.4.5
> redis服务器v = 2.6.14
> redis-cli 2.6.14
express testApplication
在创建的“package.json”中,我定义了所有必要的依赖项.
从一开始,我就在一个名为“cluster.js”的文件中定义了一个用于垂直扩展(多进程)的集群:
var cluster = require('cluster'); if( cluster.ismaster ) { var noOfWorkers = process.env.NODE_WORKERS || require('os').cpus().length; console.log("Workers found: " + noOfWorkers); for (var i = 0; i < noOfWorkers; i += 1) { cluster.fork(); } } else { require('./app.js'); } cluster.on('exit',function(worker,code,signal) { var exitCode = worker.process.exitCode; console.log('worker' + worker.process.pid + ' died (' + exitCode + '). restarTing...'); if( typeof cluster.workers[worker.id] != "undefined" ) cluster.workers[worker.id].delete(); cluster.fork(); });
在我的“app.js”文件中,我为socket.io存储了redis:
io.set('store',new redisStore({ redisPub: pub,redisSub: sub,redisClient: client }));
到目前为止,这么好,这一切都很好.
当客户端连接到socket.io服务器时,群集将处理与不同工作程序的连接.
我的意图是,客户端可以向特定的另一个客户端发送消息,因此socket.io服务器必须从接收者中找到套接字才能仅向该用户发送消息.我的解决方案是,我为数组中的每个用户存储所有创建的套接字ID,当发送消息时,我在数组中选择相关的套接字id,通过id获取套接字,并将消息发送到套接字(s ).
这对于仅在一台服务器上运行的socket.io应用程序非常有用.
现在,我想配置具有相同程序,模块和包的另一台服务器.
负载平衡可能由HAProxy处理.因此,socket.io连接(套接字)将在服务器A和服务器B上存储和管理.
示例场景:
用户A连接到服务器A,用户B连接到服务器B.这意味着,用户A在服务器A上具有套接字,在服务器B上具有用户B.
应用程序如何知道,它必须在服务器B上查找用户B的套接字才能发送消息?在服务器A上,它将找不到套接字,因为它是在服务器B上创建的.
多谢!
以上是大佬教程为你收集整理的node.js socket.io redis architecture – horizontal serverscaling socket connections?全部内容,希望文章能够帮你解决node.js socket.io redis architecture – horizontal serverscaling socket connections?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。