2014-10-22 114 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