php – 使用服务器同步两个客户端JavaScript计时器

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 使用服务器同步两个客户端JavaScript计时器脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我有两个 JavaScript倒计时器(用于游戏),以及@L_304_2@MysqL表,用于从任何一个AJAX调用接收数据.

该过程如下:

>客户端启动计时器,将其写入data1 MysqL
它启动了计时器,并带有当前的time1列
时间戳(精度为.01s,来自PHP调用,因为MysqL没有
去做)
>另一个客户端(以2秒间隔轮询服务器)检测到更改,并启动计时器,但立即减去(它是倒数计时器)ctime – time1其中ctime是第二个客户端调用的时间戳(也由PHP提供)和time1是第一个客户端启动计时器时写入的时间戳.

这种方法应该消除由轮询的2s间隔引起的延迟,但无论它是否存在(我真的不确定),定时器之间的同步会有所不同.有时它们确实是死的,有时它们最多可以消失3秒钟. (这是不可靠的.)

这是我正在使用的一些相关代码

VAR timerRunning,timeRemaining,responseTime;

function restartLocalTimer() {
    var d = new Date();
    responseTime = d.getTime()/1000;
    timerRunning = true;
    timerTick();
}

function restartSyncTimer(resp) { // resp is the AJAX response passed
    var d = new Date();
    responseTime = d.getTime()/1000 - parseFloat(resp["ctime"]) + parseFloat(resp["time"]);
    timerRunning = true;
    timerTick();
}

function timerTick() {
    d = new Date();
    timeRemaining = 20 - d.getTime()/1000 + responseTime;
    if (timerRunning) setTimeout("timerTick()",25);
}

所有时间值都以秒为单位. (由于数据库,以后可能会更改为ms.)

我的问题是:是否还有其他(重大)延误我不考虑?有没有更好的方法呢?

另请注意:我对jquery开放(使用它已经用于AJAX调用),但不想使用websockets.

我会采用与桌面网络多人游戏相同的方法.即使在连接中断的短暂时刻(例如“滞后”),客户端也会在该时间内投射预期的轨迹.在这种情况下,您依赖于本地间隔,并在获得异步心跳响应时使用确切的服务器时间进行更新.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 使用服务器同步两个客户端JavaScript计时器全部内容,希望文章能够帮你解决php – 使用服务器同步两个客户端JavaScript计时器所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。