Socket.io连接的用户计数(Socket.io Connected User Count)

2019-07-29 02:54发布

我终于socket.io正常工作,但我已经遇到了一个奇怪的问题。

我不知道这是否是最好的方式,但我使用:

io.sockets.clients().length

这将返回连接到我的服务器的客户端的数量。 问题是用户数的连接和断开,数量开始保持高于它应该是后。

举例来说,如果我接了,问我的朋友,这个数字上升这是正确的。 但是,当我们开始断开并重新连接数量不减少。

我运行Node.js的和VMware的Ubuntu服务器上sockets.io服务器。

有谁知道这是为什么还是有找出有多少人连接到服务器上更好的方法?

Answer 1:

有一个github上的问题这一点。 问题是,只要有人断开socket.io不会删除(拼接)从阵列中,而只是将值设置为“零”,所以其实你有很多空值的阵列,使你的客户( )。长度比你在现实中有连接大。

你必须为你的计数的客户,比如像管理不同的方式

socket.on('connect', function() { connectCounter++; });
socket.on('disconnect', function() { connectCounter--; });

这是一个头脑嗡嗡声,为什么后面socket.io的人都留下了这样的事情,但它是在GitHub上的问题,这是我张贴的链接更好地解释!



Answer 2:

万一有人被这个页面,同时使用socket.io 1.0版

你可以得到连接的客户端从数

socketIO.engine.clientsCount

需要一个答案,上面没有为socket.io的新版本中运行



Answer 3:

我发现弄明白在1.3.7版本的方式。 有三种方法如下:

  1. io.engine.clientsCount
  2. io.sockets.sockets.length
  3. Object.keys(io.sockets.connected).length

希望这些能帮助别人用同样的问题。:)



Answer 4:

为什么要使用一个(隐含全局)变量时,你总是可以过滤阵列,即通过调用客户端()方法返回。

function filterNullValues (i) {
  return (i!=null);
}
io.sockets.clients().filter(filterNullValues).length;


Answer 5:

我目前使用Socket.io v1.3.6,并且发现,这个工作。 它使用户在连接一个准确的数字,当他们断开连接:

io.sockets.sockets.length

像这样:

var io = require('socket.io').listen(server);
io.on('connection', function(socket) {
  console.log(io.sockets.sockets.length);
  socket.on('disconnect', function() {
    console.log(io.sockets.sockets.length);
  });
});


Answer 6:

也看看到:

io.sockets.manager.connected

它的键值对的清洁列表(插座ID和连接状态?)



Answer 7:

我使用socket.io 0.9.10和下面的代码,以确定插槽的数量:

var socketIO =  require('socket.io').listen( .....
var numberOfSockets = Object.keys(socketIO.connected).length;

不知道如何准确的这个数字响应各种边缘的情况下,但是,直到目前看来是准确的:连接每一个浏览器数量的增加,每一个浏览器关闭,减少它。



Answer 8:

我没有看到多核心的任何提及的应用,因此我只是要补充一点,因为我使用多核心(集群)我是不是能够得到始终如一的客户端插口的正确数量,所以我结束了将它们保存到我的蒙戈实例,它是相当一致和准确的。 通过这种方法,我可以通过浏览器:)在风格上观看我的套接字连接。

猫鼬模式:

var socketSchema = mongoose.Schema({
        socket : Number
});

用法:

//reset to 0 when the app starts ( just in case )
SocketModel.find({ "socket" : 1 } , function(err, deadSockets ) {
    if (err){
        console.log( err );
    }
    else{
        for( var i = 0 ; i < deadSockets.length ; i++ ){
            deadSockets[i].remove();                
        }
    }
});

io.on('connection', function( socket ) {
    //I found I needed to make sure I had a socket object to get proper counts consistantly
    if( socket ){
        var socketEntry = new SocketModel({ "socket" : 1 });
        socketEntry.save( function(err ){
            if (err){
                console.log( err );
            }
            else{

            }
        });
    }
    //On Disconnect
    socket.on('disconnect', function() {
        SocketModel.findOne({ "socket" : 1} , function(err, deadSocket ) {
            if (err){
                console.log( err );
            }
            else{
                deadSocket.remove();
            }
        }); 
    });
});

有多少我有吗?

SocketModel.count({ "socket" : 1 } , function(err, count ) {
    if (err){
        console.log(err);
    }
    else{
        var term = "sockets";
        if( count == 1 ) term = "socket";
        console.log("Current Load: " , count , term );
    }
}); 

注:*我不喜欢使用空查询对象({}),所以我只是用{“插座”:1}为假,而不是



Answer 9:

我目前使用的插座v1.4.29与打字稿,你可以找到使用此连接的客户端的数量

 io.sockets.on('connection', function(socket) {
 var clients = socket.client.conn.emit.length;
 console.log("clients: " + clients);
 });


Answer 10:

连接的用户数在数量上与socket.io版本 - 1.3.7

 io.on('connection', (socket) => { console.log(io.sockets.server.httpServer._connections); //output in number // or console.log(io.sockets.server.engine.clientsCount); //output in number }); 



Answer 11:

与socket.io 2.2.0更容易:

io.on('connection', function (socket) {
    console.log( socket.client.conn.server.clientsCount + " users connected" );
});

干杯



文章来源: Socket.io Connected User Count