Node.js 如何在Socket.io中计算和广播一个数字

Node.js 如何在Socket.io中计算和广播一个数字,node.js,sockets,Node.js,Sockets,我有一个非常基本的网站,有一个非常基本的想法:当用户连接到网站时,它应该说“点击:0”,当他按下键盘上的按钮时,它应该做Clicks++并更新为“Clicks:1”(假设没有人点击) 我需要使用NodeJS和Socket.io安全地执行此操作。我有计数功能,它可以工作,但我不确定我应该如何存储点击量。通常,我会在数据库或某种类型中执行此操作,然后每隔一段时间更新一次(每次单击更新都会产生大量负载?) 套接字更新 jQuery发出 当我执行此操作时(假设定义了我的单击变量),它将跨所有客户端更新。

我有一个非常基本的网站,有一个非常基本的想法:当用户连接到网站时,它应该说“点击:0”,当他按下键盘上的按钮时,它应该做
Clicks++
并更新为“Clicks:1”(假设没有人点击)

我需要使用NodeJS和Socket.io安全地执行此操作。我有计数功能,它可以工作,但我不确定我应该如何存储点击量。通常,我会在数据库或某种类型中执行此操作,然后每隔一段时间更新一次(每次单击更新都会产生大量负载?)

套接字更新 jQuery发出 当我执行此操作时(假设定义了我的
单击
变量),它将跨所有客户端更新。确实如此


存储
clicks
变量的最佳方法是什么?很明显,当您最初启动站点时,您需要执行
clicks=database.get(“clicks”)
(如果您知道我的意思的话)。谢谢

既然您喜欢将sql与NodeJ一起使用,那么有一个很好的解决方案-

有一种方法,您可以使用它的实例方法来增加它,如下所示:

User.findById(1).then(function(user) {
  return user.increment('clicks', { by: 1 })
}).then(/* ... */);
p.S:
{by:1}
是可选的。你可以找到更多的例子

用于:


主要取决于您将使用的dbms。您介意使用哪个数据库?@OlegMeleshko所以您建议使用数据库,然后更新金额?第一次使用NodeJS,但我是ferm MySQL和MariaDB用户。因此,假设我没有用户基础,只有一个名为“clickTable”的表,我会这样做:
clickTable.findById(1)
,它将选择第一行,然后执行
增量('clicks'
会找到名为clicks的列并增加它?这就是它的工作方式吗?显然我的clickTable需要定义等等@snorax是的,它会的。用这种方式保存一个id=1的记录。表结构可能会有所不同,这只是
findById
的一个例子。还有很多其他方法可以使用你可以存储这些信息,然后从你的数据库中查询。Sequalize非常灵活,只要再深入一点,你就会明白。我不完全确定我应该如何定义我的表。这看起来有错吗?-表名是clicks,列是id,clicks。很好,我会尽快测试它。我需要输入我的SQL密码等等。呵呵我会继续让它安全吗?我不介意人们阅读我的代码,只要他们看不到我的数据库连接字符串。工作非常出色。我不得不添加
时间戳:false
和其他一些东西,但它工作得非常好!非常感谢,朋友!
$("body, window").on("keyup", function() {
    socket.emit("update");
});
User.findById(1).then(function(user) {
  return user.increment('clicks', { by: 1 })
}).then(/* ... */);
var Clicks = sequelize.define('clicks', {
  name: { type: Sequelize.STRING, allowNull: true },
  amount: { type: Sequalize.INTEGER, defaultValue: 0 }
}, {
  freezeTableName: true
});

// Create table if not created yet
Clicks.sync();

// somewhere in your sockets callback
Clicks.findOrCreate({ where: { id: 1 }, defaults: { amount: 1 }})
      .spread(function(click, created) {
           if (created) {
              // created first time with default value, send some response back here
           } else {
             click.increment('amount', { by: 1 })
                .then(function() {
                    // send some response back to user(-s)
                });
           }
      });