2014-10-22 61 views
2

我受此启发:http://socket.io/docs/using-multiple-nodes/#passing-events-between-nodes,现在我想通过redis adpter同步两个socket.io实例。socket.io - 在节点之间传递事件

这是我的代码:

//FIRST SERVER (server1.js) 


var io = require('socket.io')(3000); 
var redis = require('socket.io-redis'); 
io.adapter(redis({ host: 'localhost', port: 6379 })); 

var test = 0; 

io.on('connection', function (socket) { 
    test+=1; 
    console.log("connection. test = " + test); 
}); 

//SECOND SERVER (server2.js) 


var io = require('socket.io')(4000); 
var redis = require('socket.io-redis'); 
io.adapter(redis({ host: 'localhost', port: 6379 })); 

var test = 0; 

io.on('connection', function (socket) { 
    test+=1; 
    console.log("connection. test = " + test); 
}); 

当我连接到server1.js(3000端口) - 我看“连接。测试= 1',这很好,但第二台服务器的控制台仍然干净。我想第二台服务器(端口4000)做同样的事情(打印'连接= 1')。

我在做什么错了?你能告诉我一个例子如何使用适配器?

感谢

回答

5

如果只连接到server1:3000没有办法的io.on('connection', ...)将在server2:4000被触发 - 毕竟,你是不是连接到该服务器。

每个客户端将只连接到您的一台服务器。如果您未使用连接到不同服务器的Redis适配器客户端将无法通信。现在使用Redis适配器,服务器可以了解彼此的客户端,并可以将消息广播到所有服务器的所有连接客户端。

+0

听起来没错。有两件事要尝试。尝试将数据附加到套接字。 ex socket.username ='ted'。如果这样做不起作用,您可以随时安装redis pub/sub并为节点创建适配器(如通信通道),以便共享非socket.io消息。 – Eddie 2015-07-17 19:39:14

+0

我有两个相同的服务器,我在bot服务器和客户端使用[email protected]。在我的代码中添加一个时间来打印连接的套接字总数。我在一台服务器上得到了正确的号码,但是在另一台服务器上,我得到的只是0.以下是我用于计数检查的内容。 Object.keys(io.sockets.connected)。长度) – 2016-08-02 07:04:05