问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

客户端和服务器的时间差

创作时间:
作者:
@小白创作中心

客户端和服务器的时间差

引用
CSDN
1.
https://blog.csdn.net/id123152/article/details/144449877

在开发Web应用时,客户端和服务器之间的时间差可能会导致一些意想不到的问题。本文通过一个具体场景(工作人员入场时间显示)来说明这个问题,并提供了一个实用的解决方案。

当工作人员开始工作后,希望界面能够实时显示他已在场的时间,像这样。

按理说前端通过接口拿到工作人员的入场时间,根据

当前时间 - 入场时间

得出初始入场时间,再

setInterval

实时刷新即可。

但是如果你修改了客户端的时区,比如这样。就会发现,已在场时间为变化不定(如下图)。


这是因为服务器和客户端的时区不一致导致的。怎么解决?

其实也挺简单的,让后端在查询接口中返回服务器的当前时间(如下图),

nowTime

表示服务器当前时间,

startTime

是入场时间。

那么入场的初始时间计算如下:


客户端发起请求,获取服务器的时间戳 nowTime
客户端记录发送请求的本地时间 T_local_sent。
客户端记录接收到服务器响应的本地时间 T_local_received。
计算请求往返时间(RTT):RTT = T_local_received - T_local_sent
服务器的时间估计:T_server_adjusted = nowTime + RTT / 2
入场的初始时间 = new Datae(nowTime) + RTT / 2 - new Date(startTime)
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号