0

我正在使用 node 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 客户端。

4

2 回答 2

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 count 所有房间中的客户端总数。

您的代码 io.sockets.connected 只依靠一台服务器(计算机/机器)

于 2017-02-06T04:00:35.407 回答
0

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

于 2016-08-05T22:40:00.523 回答