node.js - Nodejs实时在线人数统计

标签 node.js google-analytics socket.io

我有一个网站,并使用nodejs和socket.io实现了实时在线用户计数器。这是代码:

$io.on('connection', function (socket) {

    var $ip_address = socket.handshake.address;
    if ($ips_connected.hasOwnProperty($ip_address)) {
        $ips_connected[$ip_address]++;
    } else {
        $ips_connected[$ip_address] = 1;
        $connected_users++;


        if ($connected_users > $max_users)
            $max_users = $connected_users;
    }

    socket.emit('update', $connected_users);

    socket.on('disconnect', function () {
        if ($ips_connected.hasOwnProperty($ip_address)) {
            $ips_connected[$ip_address]--;
            if ($ips_connected[$ip_address] <= 0) {
                delete $ips_connected[$ip_address];
                $connected_users--;
            }
        }
    });

    socket.on('update', function () {
        socket.emit('update', $connected_users);
    });

});

如您所见,我不考虑同一 IP 地址的多个连接。此代码的问题是 Google Analytics 实时数据显示的数字小于 Nodejs 计算的数字。

我需要的是一个已经使用nodejs实现了类似的东西的人的解释,告诉我我是否可以信任这个代码或者我应该信任分析实时计数器。我正在使用此代码向我的用户显示目前连接到我的网站的用户数量,因此我不想显示错误的数字。

更新

我忘了说,分析显示的数字比我自己的计数器少了 30 个单位。

最佳答案

我在某些浏览器(如 IE8、IE6 和其他不记得的浏览器)中见过一些场景...通常 socket.io 会中断连接并自动重新启动,而不调用 disconnect。 我对您的建议是为每个连接生成一个唯一的 ID,以控制这是否确实是一个新连接。

关于node.js - Nodejs实时在线人数统计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29233846/

相关文章:

node.js - 降级 node.js - Windows

node.js - Azure Functions 使用 Node 强大解析表单数据

google-analytics - Google Analytics - 一种通过 API 从 Query Explorer 提交查询的方法

google-analytics - ga_sessions的BigQuery _TABLE_SUFFIX

node.js - 单击按钮触发 socket.emit

node.js - socket.io 来自一个客户端的所有线程都具有相同的 socket.id

node.js - 什么是最佳实践 "joining"mongoose/mongodb 中没有填充的一堆值

javascript - 如何正确使用socket.io和oop

google-analytics - 分析 API 的每日错误限制何时重置?

javascript - Socket.IO 应用程序未启动,无输出