【问题标题】:Countdown server side best practices倒计时服务器端最佳实践
【发布时间】:2020-12-21 18:47:12
【问题描述】:

问题
我有一个服务器端的倒计时,需要在客户端显示。首先,我使用 socket.io 制作它,基本上每 100 毫秒发出一次。现在我真的很喜欢这个,但我担心可能会出现显着的性能降级,而只是发出一个信号并让客户端进行倒计时,但这带来了另一个问题,即在重置之前无法看到倒计时值。每 100 毫秒发射一次真的有那么糟糕吗?还是可以?

编辑
我需要它服务器端,因为所有用户的身份验证和一致性循环很小 40 秒,然后是 10 秒暂停。我需要知道用户是否在那段时间内执行了操作

【问题讨论】:

  • “直到它重置后才能看到倒计时值”是什么意思?
  • 好吧,如果我发送一个信号,当计数器再次启动时,只有一个而不是数千个发送给用户。在计数器运行时加入的用户不会收到来自我的服务器的信号,并且客户端 js 不会为他们启动计时器。这意味着他们必须等待计数器重新启动并再次发送信号
  • 如果不了解用例,很难知道什么是最好的。最初是什么促使您远离客户进行倒计时?在服务器端运行它试图解决什么问题?
  • “因为身份验证”?目前还不清楚您要解决什么问题。
  • 如果您希望在所有客户端之间保持时间同步,那么如何在服务器中存储开始时间(可能为 UTC 以保持一致性)和倒计时持续时间,然后通过 API 返回该数据称呼?这样一来,您就不会每隔几分钟发出数千次或更多次,并且您仍然可以在前端有一个计时器,下面是 Fus_ion 的实现。

标签: javascript node.js websocket socket.io


【解决方案1】:

老实说,我建议由客户端执行此操作,因为即使他们与服务器断开了某种类型的连接,它也是最简单和更好的


function msToTime(duration) {
    var seconds = parseInt((duration/1000)%60),minutes = parseInt((duration/(1000*60))%60),hours = parseInt((duration/(1000*60*60))%24),days  = parseInt(duration/(1000*60*60*24));

    var hoursDays = parseInt(days*24);
    hours += hoursDays;
    hours = (hours < 10) ? "0" + hours : hours;
    minutes = (minutes < 10) ? "0" + minutes : minutes;
    seconds = (seconds < 10) ? "0" + seconds : seconds;
    return hours + ":" + minutes + ":" + seconds;
}

function startCountdown(){
setInterval(function(){
  var a = new Date().getTime();
  var now = new Date();
  var b = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 24, 0, 0, 0).getTime();
  document.getElementsByClassName("text")[0].innerHTML= msToTime(b-a);
  },0);
}
<input onclick="startCountdown()" type="submit">
<p class="text" ></p>

功能来自这里:https://stackoverflow.com/a/19700358/14746601

【讨论】:

  • 谢谢,但我真的需要它在服务器端,因为身份验证会将它包含在帖子中
猜你喜欢
  • 2010-12-21
  • 2018-03-06
  • 1970-01-01
  • 2020-08-15
  • 1970-01-01
  • 1970-01-01
  • 2015-07-26
  • 2011-04-27
  • 2012-09-13
相关资源
最近更新 更多