Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js socket.io redis architecture – horizo​​ntal serverscaling socket connections?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我第一次使用Node.js并希望得到一个建议:

我在我的服务器上安装了以下程序:

> 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上创建的.

多谢!

解决方法

横向扩展时,需要在服务器之间共享数据存储.方便的是,你已经有一个理想的,就是redis.您需要将其插入redis,并从那里进行查找,而不是将套接字映射保留在数组中.

然后,您可以决定让服务器相互发送消息,或者更可靠地通过redis发送消息.因此,每个服务器都会在redis上查看它的队列,以查看它应该向哪些套接字发送的消息.当服务器收到消息时,它会将其推送到redis,并发送给应该提供它的服务器.如果消息的排序对您很重要,我建议将https://github.com/learnboost/kue作为redis上的图层.

大佬总结

以上是大佬教程为你收集整理的node.js socket.io redis architecture – horizo​​ntal serverscaling socket connections?全部内容,希望文章能够帮你解决node.js socket.io redis architecture – horizo​​ntal serverscaling socket connections?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。