我使用socket.io從我的客戶端打開一個套接字到我的node.js服務器。我還使用io.sockets.clients().length
每10秒將連接用戶的數量推送到所有客戶端,該值的問題是,它不檢查同一用戶是否打開了具有相同頁面的多個選項卡。Socket.io - io.sockets.clients()。length如何獲取連接客戶端的唯一列表
有沒有辦法獲得在socket.io中連接的唯一客戶端列表?
我使用socket.io從我的客戶端打開一個套接字到我的node.js服務器。我還使用io.sockets.clients().length
每10秒將連接用戶的數量推送到所有客戶端,該值的問題是,它不檢查同一用戶是否打開了具有相同頁面的多個選項卡。Socket.io - io.sockets.clients()。length如何獲取連接客戶端的唯一列表
有沒有辦法獲得在socket.io中連接的唯一客戶端列表?
我是你鎖定每個人的唯一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
}
}
});
現在它會檢查它
這是行不通的,socket.id不會爲每個客戶端提供唯一的ID,打開多個選項卡會給我不同的socket.id。此外,「userInfo」功能不在服務器上處理。 –
change socket.on('info',function(data){});到socket.on('userInfo',function(data){}); – user3030064
這並沒有改變「socket.id」不是唯一標識客戶端的事實 –
你是什麼意思「不檢查」不 - 比你預期或低於你預期它的報告更開放的連接? – exebook
值是正確的,它給我所有開放的套接字,雖然我需要一個不同的值,而不是我需要的所有開放套接字「所有連接的唯一客戶端」。 –
你的意思是說,兩個打開的標籤在你的情況下共享相同的插座? (鉻?) – exebook