在服务器端Node.JS上倒数到一个时间并发送一个页面的响应
Count down to a time on the serverside Node.JS and send response of a page
我有一个问题,我似乎只是不知道如何做-
我见过许多客户端倒计时插件,我有一个在我的应用程序-然而,我有兴趣计数到我的服务器上的某个日期,一旦该日期和时间已经到达,我想触发一个响应客户端弹出页面。
现在-我已经尝试在客户端做倒计时。onFinish函数。但从我如何理解这一点,它不会工作,除非客户端是在倒计时完成的时间上的应用程序。假设客户端脚本仅在客户端进入应用程序时生成,我是否正确?因此,当用户进入时,计时器将已经重新启动(在登录时,我将计时器更新为倒数到最近的星期一21:00)。在服务器上-我可以检查日期是否已经到达,在函数之外,但这只会发生一次部署,正确吗?如果我每隔一段时间检查一次,每次我更新应用程序,这些时间间隔就会混乱,我可能会错过00:00小时。
这是我在我的服务端(使用expressJS, nodeJS)的想法
var today = new Date();
var currentDay = today.getDay() + 1;
var currentMonth = today.getMonth() + 1;
var currentDate = today.getDate();
var currentYear = today.getFullYear();
//var date = [02, 22, 2014];
var dateTillMatch = findNearestMonday(currentDay, currentDate, currentMonth, currentYear);
if (dateTillMatch[0] == currentDay && dateTillMatch[1] == currentDate && dateTillMatch[2] == currentMonth && dateTillMatch[3] == currentYear) {
updateAllStats();
}
,这是我在我的客户端-没有工作-因为在00:00的时候没有我的用户在应用程序内!(天才我知道…)
function timer(date) {
$('#clock').countdown(date[2] + '/' + date[0] + '/' + date[1] + ' 21:30:00', function(event) {
$(this).html(event.strftime('%D days %H:%M:%S'));
}).on('finish.countdown', function(event) {
var played = localStorage.getItem('attending');
//If the player was attending/not attending at end of countdown, send to DB that GamesPlayed ++ or gamesNotPlayed ++
if (played == 1 || played == -1) {
var request = false;
var result = null;
var name = localStorage.getItem('first') + " " + localStorage.getItem('last');
request = new XMLHttpRequest();
if (request) {
request.open("GET", "usersGamesPlayed/" + name + "_" + played);
request.onreadystatechange = function() {
if (request.readyState == 4 && request.status == 200) {
result = JSON.parse(request.responseText);
if (result == null) {
alert('PROBLEMO');
} else {
if (played == 1) {
localStorage.setItem('gamesPlayed', parseInt(result.gamesPlayed));
} else {
localStorage.setItem('gamesNotPlayed', parseInt(result.gamesNotPlayed));
}
//Set back to 0
localStorage.setItem('attending', 0);
//Popup to find Best Player
console.log("Choose MVP");
$('#bestPlayerPopup').popup();
$("#bestPlayerPopup").popup("open");
}
}
};
request.send(null);
}
}
});
}
所以总结-我理解等待客户端计数器到达00:00是毫无意义的,因为"如果一棵树倒下了,没有人听到它,它会发出声音吗?"-或者别的什么:)那么我如何在服务器上做同样的事情呢?并且-在时间结束时,我如何向用户发送弹出窗口-或者至少将他重定向到一个页面。我是否需要将其绑定到来自客户端的某些请求?因为它违背了在00:00做这件事的目的。我的DB是MongoDB,所以我可以在必要时使用它。
我希望这个问题不要太长!谢谢你我会使用websockets (http://socket.io)。在服务器上使用node.js timer-api生成事件,该事件将必要的数据发送给所有正在侦听的客户端(查看倒计时页面)。
在客户端,您捕获事件,然后使用接收到的数据更新当前页面,或者向您的"倒计时完成"页面发出新的get请求。
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- jQuery:循环一个具有不同超时值的循环
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 从javascript创建一个列表
- 节点导出返回一个空对象
- 使用clickToggle并在单击另一个元素时关闭元素
- 我可以在json对象中添加一个函数吗
- 使用javascript将动态表从一个html页面打印到另一个html页
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 表追加而不附加最后一个元素
- 我如何找到一个句子中的所有空格并替换忽略它们
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何在android中使用phonegap将文件从一个文件夹移动/复制到另一个文件夹
- 使用类从一个标记中双击事件
- Javascript,访问一个主要对象模块模式中的每个对象
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 一个承诺换多个承诺-并发问题
- 编写一个脚本来确定浏览器为特定域允许的最大并发ajax调用数
- 说Node.js &JavaScript提供了一个基于事件循环的并发模型
- Ajax并发调用一个接一个地运行