作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个非常基本的网站,但有一个基本的想法:当用户连接到该网站时,它应该显示“点击次数:0”,而当他按下键盘上的按钮时,它应该执行clicks++
并更新为“点击次数:1” (假设没有人点击)。
我需要使用NodeJS和Socket.io安全地执行此操作。我具有计数功能,并且可以使用,但是我不确定应该如何存储点击量。通常,我会在数据库或某种形式的数据库中执行此操作,然后不时更新一次(每次单击更新都会增加很多负载吗?)。
套接字更新
socket.on("update", function() {
$("#clicks").text(clicks++);
});
$("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。
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/
我是一名优秀的程序员,十分优秀!