2013-11-24 34 views
0

我使用socket.io從我的客戶端打開一個套接字到我的node.js服務器。我還使用io.sockets.clients().length每10秒將連接用戶的數量推送到所有客戶端,該值的問題是,它不檢查同一用戶是否打開了具有相同頁面的多個選項卡。Socket.io - io.sockets.clients()。length如何獲取連接客戶端的唯一列表

有沒有辦法獲得在socket.io中連接的唯一客戶端列表?

+0

你是什麼意思「不檢查」不 - 比你預期或低於你預期它的報告更開放的連接? – exebook

+0

值是正確的,它給我所有開放的套接字,雖然我需要一個不同的值,而不是我需要的所有開放套接字「所有連接的唯一客戶端」。 –

+0

你的意思是說,兩個打開的標籤在你的情況下共享相同的插座? (鉻?) – exebook

回答

0

我是你鎖定每個人的唯一ID。

客戶端代碼。

//當用戶連接到插座服務器發出像一些信息情況下,本 socket.emit('userInfo','clintUniqueID');//like mailid ID,username,anything but its unique

//當用戶打開其他標籤頁

socket.on('multipleTabs',function(data){ 
    //Your operation for client side  
    //example 
     alert('you are open multiple tabs');}); 

Server代碼:

var connection={}; //socket.io connection each user 
var usersList=[];//This list only contain unique ID for each connection 
socket.on('userInfo',function(data){//emit by client (user) 
connection[socket.id]=socket; // just for connection 
var(var i=0;i<usersList.length;i++) 
    { 
      if(usersList[i]==data)//Here you store user unique ID like mailID,Username etc 
      { 
        //user open multiple tabs 
        //Any operation server site 
        //if you want to do any operation in client site 
        socket.emit('multipleTabs','userAlreadyExit'); 



     }else 
      { 
         if(i==usersList.length-1) 
          { 
           usersList.push(data);//store socket.id 
            } 

        } 
}); 

現在它會檢查它

+0

這是行不通的,socket.id不會爲每個客戶端提供唯一的ID,打開多個選項卡會給我不同的socket.id。此外,「userInfo」功能不在服務器上處理。 –

+0

change socket.on('info',function(data){});到socket.on('userInfo',function(data){}); – user3030064

+0

這並沒有改變「socket.id」不是唯一標識客戶端的事實 –

相關問題