php-通过存储在数据库中的日期/时间在多个浏览器之间保持倒数计时器同步

我想尝试使多个浏览器/客户端之间的计时器保持同步,该计时器递减到存储在数据库中的日期.如果日期由于某种原因发生变化,那么我将需要适当地更新计时器.这最终将成为我试图创建的JavaScript游戏的一部分,但在真正继续之前,我需要游戏的核心.

该计时器本质上将是动态的,因为如果需要,时间将需要轻松更改.我想到了通过PHP脚本每秒轮询数据库以进行更改的想法,这也将有助于在浏览器之间同步计时器.但是,这似乎很耗费服务器资源,并且如果可能存在延迟,则实际上可能不会同步计时器.

任何想法都会有所帮助,谢谢.

SQL:

CREATE TABLE timer(
    timer_id    INT       PRIMARY KEY  AUTO_INCREMENT,
    timer_date  DATETIME  NOT NULL
);

jQuery的:

$(document).ready(function() {
            $('#button').click(function() {                     
                //get timer id
                var timerId = $('#button').attr('tid');
                //disable button
                $('#button').attr('disabled', 'disabled');              
                //send ajax request
                $.ajax({
                    url: "process.php",
                    type: "POST",
                    data: "id="+timerId,
                    dataType: "json",
                    success: function(data){
                        //IF TIMER HAS CHANGED UPDATE ELSE DON'T DO IT

                        //re-enable button        
                        $('#button').removeAttr("disabled");
                    }
                });
            }); 

解决方法:

您有两个选择,轮询或TCP keepalive.尽管轮询更易于实现,但两种方法都可以工作.

从为游戏客户端提供Web服务的角度考虑这一点.从客户端的角度来看,它并不在乎是否涉及数据库.因此,请记住这一点,设置您的时间戳URL(例如,sync.php),然后在内存中设置诸如memcache之类的内容来存储数据,这样就不会一直造成数据库开销.

我也会认真考虑客户端中的关键路径.您真的需要每秒轮询一次吗?在这种情况下,网络延迟可能只是一个因素.您的客户应具有足够的聪明才智,以了解某些事情是否取决于时间的准确性,您应该对此进行编码.

更新1:

作为对您的代码示例的回应,我建议您考虑使用GET而不是POST进行轮询,因为您实际上并没有更改系统状态,而是尝试从中检索信息(我推断这从您的问题开始,因为代码似乎实际上是在更改系统状态).

上一篇:前端完成的二维码半小时失效倒计时


下一篇:wordpress不用插件实现倒计时的功能