Javascript 计算我的网页点击数

Javascript 计算我的网页点击数,javascript,angularjs,node.js,Javascript,Angularjs,Node.js,我开发了一个网页,用于对公司的一些服务进行内部监控。我们希望在页面上记录点击次数并实时显示。我已经回答了以下问题: 但我不能使用谷歌分析和其他类似的工具。我希望它能在nodejs中完成。问题是,如果我在nodejs服务器上执行类似操作: var express = require('express'); var app = express(); var bodyParser = require('body-parser'); var request = require('request')

我开发了一个网页,用于对公司的一些服务进行内部监控。我们希望在页面上记录点击次数并实时显示。我已经回答了以下问题:

但我不能使用谷歌分析和其他类似的工具。我希望它能在nodejs中完成。问题是,如果我在nodejs服务器上执行类似操作:

var express = require('express');
var app = express();

var bodyParser = require('body-parser');
var request = require('request');
var cfenv = require('cfenv');
app.use(express.static(__dirname + "/public"));
app.use(bodyParser.json());
var userCount = 0;
app.post('/counterIncrement', function(req, res){
console.log("I received a request to refresh the counter");
userCount = userCount + 1;
res.json({countNum: userCount});
});
var router1 = require('./public/routes/Route1');
router1(app);

var router2 = require('./public/routes/Route2');
router2(app);

var router3 = require('./public/routes/Route3');
router3(app);

var appEnv = cfenv.getAppEnv();

app.listen(appEnv.port, appEnv.bind, function() {

   console.log("server starting on " + appEnv.url); 
});
每次有人访问我们的网页,我们都会从控制器向服务器发送一个请求以增加计数器。当多人同时访问网页时,这是否会造成竞争条件?还有别的办法吗


我们也查看了Cookie,但我们希望在同一用户再次访问时增加计数器,即使这是可能的,我也无法理解如何避免争用条件?

假设您运行的是单个Node.js进程,那么您可以确保不会出现争用条件。js是单线程的,因此所有javascript代码都是同步执行的。因此,每个请求将一次运行一个控制器方法

这种方法的一个缺点是,当您重新启动服务器时,
userCount
就会丢失,因为它存储在进程的内存中

但是,如果您使用多个Node.js进程,则此方法将失败,因为每个Node.js进程将维护自己不同的
userCount
。唯一的防故障方法是使用一个中央数据库(对所有Node.js进程来说都是通用的),它已经处理了竞争条件(大多数情况下是这样),并将计数存储在那里

我们希望在页面上记录点击次数并真实显示 时间

在这种情况下,使用WebSocket进行实时处理,这在您的情况下似乎是一个更方便的解决方案。使用WebSockets,当有人关闭页面时,您也可以减少“活动”用户的数量。您甚至不需要将数字存储在数据库中,除非您希望跟踪每一个点击的页面

你正在做的
userCount
技巧很有趣,但也有一个阴暗面:如果服务器重新启动,你就会丢失号码

更新:

以下是您的操作方法:

  • 当您收到一个页面点击时,您将打开一个WebSocket连接
  • 成功打开连接后,增加live number计数器
  • 成功打开连接后,在数据库中增加一个数字以跟踪所有点击
  • (可选)关闭连接时,减小活动号码计数器

  • 当您需要计数时,请插入计算机的用户Ip地址或mac id。对插入的记录进行计数。插入mac id您还可以对网站上的唯一访问者进行计数是否可以记录所有点击数或仅记录实时用户数?我们需要保留一个计数器来记录所有的命中率。当服务器重新启动时,我们如何才能不丢失这个号码呢?我想我只有一个node.js进程(我已经编辑了问题中的代码)。正如在中一样,我有一个带有以下代码的server.js文件-根据最终用户的不同操作,对不同的路由进行不同的调用,但这是主服务器文件。这就是你所说的单进程吗?是的,你有一个Node.js进程。当您使用集群模块或使用某种负载平衡来平衡多个服务器或端口的负载时,可能会有多个Node.js进程。基本上,multiple Node.js process意味着您同时在多台机器或多个端口上运行您的进程,然后平衡所有运行进程的传入请求。