You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多人游戏客户端线性插值:Node.js与JS UTC时间不一致问题求解

解决服务器与客户端UTC时间同步问题

核心思路

不要直接依赖客户端本地系统时间,通过时间偏移量校准,让客户端计算出与服务器对齐的统一UTC时间,彻底解决两端时间不一致的问题。

具体实现步骤

  • 计算时间偏移量

    1. 客户端发起时间同步请求,记录发送时的本地时间clientSendTime(使用Date.now(),Node.js和浏览器均支持)
    2. 服务器收到请求后,立即返回当前服务器时间serverReceiveTime(同样用Date.now())
    3. 客户端收到响应时,记录本地时间clientReceiveTime
    4. 计算单向网络延迟:delay = (clientReceiveTime - clientSendTime) / 2
    5. 计算时间偏移量:timeOffset = serverReceiveTime - (clientSendTime + delay)
    6. 此后客户端的统一UTC时间为:Date.now() + timeOffset,该时间与服务器时间基本一致
  • 定期校准偏移量
    网络延迟可能随时间波动,建议每隔5-10秒重新执行一次时间同步流程,更新timeOffset,避免长期运行后时间偏差过大。

  • 适配子弹SpawnTime的插值逻辑

    1. 服务器创建子弹时,记录服务器端的serverSpawnTime(Date.now()),并将该值同步给客户端
    2. 客户端计算子弹已存在时长时,使用校准后的统一UTC时间:ActiveTime = (Date.now() + timeOffset) - serverSpawnTime
    3. 后续的UpdateFrames、X、Y计算逻辑保持不变即可

关键注意事项

  • Date.now()返回的是自1970年1月1日UTC以来的毫秒数,本身就是UTC时间戳,只是客户端本地系统时间不准会导致偏差,偏移量校准就是为了修正这个问题
  • 绝对不要直接使用客户端本地的Date.getTime()或Date.now()与服务器同步的时间戳计算,必须通过偏移量对齐到服务器时间
  • 时间同步请求要尽量轻量化,避免携带额外数据,减少请求处理延迟对偏移量计算精度的影响

内容的提问来源于stack exchange,提问作者cs6413110

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 15:15:38