gpt4 book ai didi

node.js - 如何在Socket.io中计算和广播数字

转载 作者:行者123 更新时间:2023-12-03 11:59:50 24 4
gpt4 key购买 nike

我有一个非常基本的网站,但有一个基本的想法:当用户连接到该网站时,它应该显示“点击次数:0”,而当他按下键盘上的按钮时,它应该执行clicks++并更新为“点击次数:1” (假设没有人点击)。

我需要使用NodeJS和Socket.io安全地执行此操作。我具有计数功能,并且可以使用,但是我不确定应该如何存储点击量。通常,我会在数据库或某种形式的数据库中执行此操作,然后不时更新一次(每次单击更新都会增加很多负载吗?)。

套接字更新

socket.on("update", function() {
$("#clicks").text(clicks++);
});

jQuery发射
$("body, window").on("keyup", function() {
socket.emit("update");
});

当我这样做时(假设已定义 clicks变量),它将在所有客户端上更新。确实如此。

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

最佳答案

由于您更喜欢将SQL与Node.js一起使用,因此有一个很好的解决方案-Sequalize

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

User.findById(1).then(function(user) {
return user.increment('clicks', { by: 1 })
}).then(/* ... */);

附言: { by: 1 }是可选的。您可能会发现更多示例 here

对于 example:
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)
});
}
});

关于node.js - 如何在Socket.io中计算和广播数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35983212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com