【问题标题】:Socket.io - io.sockets.clients().length how to get unique list of connected clientsSocket.io - io.sockets.clients().length 如何获取已连接客户端的唯一列表
【发布时间】:2013-11-24 01:40:11
【问题描述】:

我使用 socket.io 打开一个从我的客户端到我的 node.js 服务器的套接字。我还使用io.sockets.clients().length 每 10 秒将连接用户的数量推送到所有客户端,这个值的问题是,它不检查同一用户是否打开了同一页面的多个选项卡。

有没有办法获取在 socket.io 中连接的唯一客户端列表?

【问题讨论】:

  • “不检查”是什么意思 - 它报告的打开连接数比您预期的多或少于您的预期?
  • 这个值是正确的,它给了我所有打开的套接字,虽然我需要一个不同的值,而不是所有打开的套接字,我需要“所有连接的唯一客户端”。
  • 你的意思是两个打开的标签在你的情况下共享同一个套接字? (铬?)
  • 同一用户打开的两个选项卡是两个套接字,这很好。但我需要弄清楚有多少客户端唯一地连接到​​我的服务器。我不确定如何使用 socket.io 执行此操作,我是否只是在客户端生成一个值,然后通过连接发送到服务器? (该值将是“用户IP”+“浏览器”+“浏览器版本”+等的组合。)
  • 您对客户的定义是什么?一个人?一台电脑?浏览器?

标签: socket.io


【解决方案1】:

我建议你使用浏览器cookies。

示例如下:

How do I create and read a value from cookie?

【讨论】:

    【解决方案2】:

    我认为您正在为每个人锁定唯一 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');});
    

    服务器代码:

    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”函数。
    • 更改 socket.on('info',function(data){});到 socket.on('userInfo',function(data){});
    • 这并没有改变“socket.id”不是唯一标识客户端的事实
    • 但你必须在socket.emit('userInfo','UNIQUEID');中指定uniqueID;
    • 可能是它的mailid,用户名任何东西
    猜你喜欢
    • 2011-09-27
    • 2017-11-29
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 2010-12-12
    • 2016-05-08
    相关资源
    最近更新 更多