2012-03-26 59 views
10

當有人連接到節點服務器時,我保留一個包含所有套接字的數組。 這樣我就可以廣播消息給大家,只要需要或循環通過用戶來統計在線用戶的數量等。node.js在斷開連接事件時不發送套接字

所有這些工作正常,但是當斷開連接事件被激發時,我不在我的論據中收到一個套接字。 是否有另一種方法知道哪個套接字剛斷開?

var allClients = []; 

io.sockets.on('connection', function(socket) { 
    allClients.push(socket); 

    socket.on('disconnect', function(socket) { 
     console.log('Got disconnect!'); 

     var i = allClients.indexOf(socket); 
     delete allClients[i]; 
    }); 
}); 

當然,上面的例子不起作用,因爲斷開連接事件沒有給出套接字參數(或任何其他參數)。 那麼是否還有另一個事件在插座還在那裏斷開連接之前觸發?

阿里

回答

22

你已經有插座,因爲斷開處理程序的「連接」事件範圍內聲明。嘗試刪除傳遞給'disconnect'處理程序的參數,您應該能夠使用連接處理程序中的套接字參數。

io.sockets.on('connection', function(socket) { 
    allClients.push(socket); 

    socket.on('disconnect', function() { 
     console.log('Got disconnect!'); 

     var i = allClients.indexOf(socket); 
     delete allClients[i]; 
    }); 
}); 

除此之外,你並不需要一個插座陣列播放,您可以使用房間組插座和廣播到房間內所有的插座。

+0

如果我需要發送數據從客戶端到服務器,就像他在第一次做什麼不會工作的任何解決方案? – 2015-11-20 19:18:34

相關問題