javascript - 跨多个客户端同步的 Firebase 倒数计时器

标签 javascript node.js angularjs firebase 2-way-object-databinding

我将尝试使用 Angular JS 为特定的利基市场构建一个便士拍卖网站。我正在尝试计划倒数计时器,并且我一直渴望尝试使用 firebase。

我昨天有一个想法,让每次拍卖都以某种方式在实际数据库中有一个倒计时,因为有了 2 种方式的数据绑定(bind),人们的客户端将始终保持更新。

当 firebase 发生变化时,所有连接的客户端都会立即发生变化。所以我的问题是……如何在特定记录中进行服务器端倒计时。

假设我有一个项目 x 的记录,它包含所有项目信息,并且数组键之一是“倒计时:59:01:00”。在服务器端从 59:01:00 到 00:00:00 倒计时的现实且可扩展的方法是什么。

我在想也许是每 1 秒运行一次的 cronjob?但是随着数百个数据库条目每秒运行数百个倒计时,服务器可能会崩溃。

有什么好主意吗?

最佳答案

Firebase 确实可以每秒处理数百个数据库操作(实际上更多)。但这将大大过度设计。

与其在服务器上运行每秒更新一次的计时器,不如简单地存储事件的开始/停止时间,并允许客户端管理自己的计时器。这不应该通过每秒递减 1 来完成(因为 setInterval 和其他客户端工具不是很精确),而是通过将当前时间戳与结尾进行比较,并确定差异。

timeout = setInterval(countDown, 1000);
function countDown() {
    setTime(Math.max(0, endsAt - Date.now()));
    if( endsAt <= Date.now() ) { clearInterval(timeout); }
}

function setTime(remaining) {
    var minutes = Math.floor(remaining / 60000);
    var seconds = Math.round(remaining / 1000);
    $('#timer').text(lpad(minutes) + ':' + lpad(seconds));
}

很可能,您希望服务器负责计时器的原因是为了使其“公平”。但这不符合逻辑。如果每个用户都将自己的“代码”保留到结束时间,并且开始/结束时间是固定的,那么这里就没有什么可以破解的了。

关于javascript - 跨多个客户端同步的 Firebase 倒数计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25051212/

相关文章:

javascript - angularjs 创建/导出 html View 为 pdf

java - Angular 和文件上传

javascript - Jqueryui图像引用没有错误但图像不显示

javascript - Node.js 为什么一次只打印一个

javascript - 如何监听房间事件

javascript - 从 js Map 解析文本

node.js - Mongoose 连接抛出警告

javascript - 如何更改 iframe src 使用 angularjs

vbscript MsgBox() 的 Javascript 等效函数

node.js - Heroku 部署失败 : sh: 1: ng: not found