如何在节点js中同步两个服务器中的socket.io客户端总数

时间:2016-08-02 07:09:37

标签: node.js socket.io node-redis socket.io-redis

我使用的是节点js 4.2.6版本并使用1.4.5 socket.io版本。我使用socket.io-redis模块作为socket.io的适配器。我有两个服务器端口3000和4000.我添加了计时器来打印连接套接字的总数,如下所示。

var socketio = require('socket.io')
var redis = require('socket.io-redis'),
io=socketio.listen(server); 
io.adapter(redis({ host: '127.0.0.1', port: 6379 }));
setInterval(function() {
                console.log("The total sockets are:::::::::::::", Object.keys(io.sockets.connected).length);
            }, 5000 );

在一台服务器中,我获得了正确的客户端数量,但在另一台服务器中,我得到了0.如何在服务器之间同步socket.io客户端。

2 个答案:

答案 0 :(得分:0)

您必须创建一个套接字模型并存储数据(在Mongo或Redis中......无论您正在使用什么),这样两个服务器实例都可以正确地请求和访问该信息。

答案 1 :(得分:0)

使用https://github.com/socketio/socket.io-redis时,有很多事情要做:

  1. io.adapter.remoteJoin(socket.id,' room_name_1',function(){})//将客户端添加到房间
  2. io.adapter.allRooms(function(err,rooms){})//得到所有房间
  3. io.adapter.clients(rooms,function(err,clients){})// clients.length计算所有房间的客户总数。
  4. 你的代码io.sockets.connected只依靠一台服务器(计算机/机器)