我想在网站的后端运行一个计数器,以便它不断计数。我制作了一个显示所需结果的javascript计数器(http://directinvent.com/counter/),但每当为每个用户加载网站时,这会重置。
这个想法很简单。运行计数器后端并在前端显示结果。关于如何做到这一点的任何想法?
答案 0 :(得分:1)
与在Javascript中使用Timer的方式相同。您在启动柜台时存储。然后在每次更新(请求)时重新计算结果。无需每隔1/10进行一次数学运算。如果没人问,这没用。
基本上,这将是这样的:
long startTime = storeTimeFor(User);
return (currentTimeInSec - startTimeInSec) * incrementationPerSec
这样,您只需要为每个用户存储startTime(如果需要,可以存储在数据库,文件或缓存中)。重置时,只需再次存储currentTime。
这就是你用大量语言做一个计时器的方法,因为每秒递增一个值(使用sleep(1000))会不准确,因为你的线程不会一直运行,你并不孤单机器;)
在客户端,我不会打电话给服务器,只是询问值存储并使用相同的逻辑从客户端进行数学运算。使用超时来每隔X ms重复一次。如果需要,请参阅如何在Javascript中创建计时器,此处只会更改值计算值。
答案 1 :(得分:0)
计数器必须存储在后端(文件或数据库中),无论是单个计数器还是每个用户一个计数器。
渲染页面时,最初显示从后端读取的计数器。
如果计数器的速度已知且常数(例如每秒增加3),那么您可以使用javascript(setTimeout
)每秒增加它。后端将存储一个数字和创建它的时间(unix时间),例如120时于08:00:00。如果用户在09:00:15访问该网站,您知道它是3615秒之后,因此您将初始页面显示为120 +(3615/3)= 1325的起始计数器。之后,javascript将增加并以每秒3次显示。
如果计数器的速度未知,则需要定期(例如每10秒一次)通过ajax检查后端,请求计数器的当前值。您可以立即显示该最新值(这意味着计数器将每10秒更新一次)。 或,如果您想了解" live",您可以在客户端以动画的形式逐步显示它。 示例:当前显示显示120.十秒后,通过ajax请求获得新值150.差异为150-120 = 30秒。您可以显示计数器每秒增加3(120,123,126,129,132,135,138,141,144,147,150)。只要总增量在10秒内为30,你也可以使用随机增量来更逼真。
答案 2 :(得分:0)
我只是通过使用Date()变量获取当天的时间,并将当天的时间乘以所需的增量常量来解决这个问题。这样,该方案将每天自动更新所需的正确数字,并且所有用户将在任何给定时间显示正确的数字。
function dotimer()
{
today=new Date()
window.setInterval("dotimer()",speed)
testMilli = today.getMilliseconds()
testSeconds = today.getSeconds()
testMinutes = today.getMinutes()
testHours = today.getHours()
totalCost = Math.round(testHours * 10800 + testMinutes * 180 + testSeconds * 3 + testMilli * 0.003);
document.getElementById("counterSeconds").innerHTML = totalCost;
}
虽然这可以用于此目的,但它仍然设法冻结浏览器,所以我将不得不找到一种方法来处理这个......