【问题标题】:Nodejs real time online user counterNodejs实时在线用户计数器
【发布时间】:2015-05-27 20:03:42
【问题描述】:

我有一个网站,并使用 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 实现类似这样的东西的人的解释,告诉我是否可以信任此代码,或者我应该信任 Analytics 实时计数器。我正在向我的用户显示当前使用此代码连接到我的网站的用户数量,所以我不想显示错误的数字。

更新

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

【问题讨论】:

    标签: node.js google-analytics socket.io


    【解决方案1】:

    我在某些浏览器(例如 IE8、IE6 和其他无法记住的浏览器)中看到过场景... socket.io 打破connection 并在不调用的情况下自动重启是很常见的disconnect。 我对你的建议是为每个连接生成一个唯一的 id,以控制它是否真的是一个新连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      相关资源
      最近更新 更多