所在的位置: js >> js发展 >> autojs时间同步

autojs时间同步

牙叔教程简单易学

autojs版本

8.7.7-0

目标

手机和服务器时间尽可能一致

各个时间的关系

手机发送请求的时刻a+网络从手机到服务器的时长b=服务器接收到请求的时刻c服务器发送响应的时刻d+网络从服务器到手机的时间e=手机收到响应的时刻fa+b=c

d+e=f

服务器处理速度较快,可以认为服务器接收到请求的时刻c=服务器发送响应的时刻d服务器处理速度较快,可以认为网络从手机到服务器的时长b=网络从服务器到手机的时间ec===d

b===e

由2和3推导a+b=c

d(c)+e(b)=f

a+b=c

c+b=f

a+b+c+b=c+f

a+2b=f

已知条件

手机发送请求的时刻a

手机收到响应的时刻f

可以求出网络从手机到服务器的时长b

网络从手机到服务器的时长b=(手机收到响应的时刻f-手机发送请求的时刻a)/2

b=(f-a)/2

服务器时刻=手机时刻+网络从手机到服务器的时长b手机时刻是知道的newDate().getTime()

网络从手机到服务器的时长也是知道的

第4步可以求解,获取网络从手机到服务器的时长

服务器时刻也就可以计算出来了

到这里就完了吗?图样图森破

手机时间的误差

手机一般默认设置使用网络提供的时间

这个时间和服务器的时间一定是有误差的

我们还要把这个误差考虑进去

那么,这个误差怎么算呢

当手机向服务器查询一次当前时间,

会产生一个手机时刻A

服务器会返回一个服务器时间

服务器时间-网络从手机到服务器的时长=手机时刻B(以服务器为标准)

手机时间误差=手机时刻B-手机时刻A

最终推导

手机时间误差=手机时刻B-手机时刻A

服务器时刻=手机时刻+网络从手机到服务器的时长b

服务器时刻=手机发送请求的时刻a+手机时间误差+网络从手机到服务器的时长b

服务器时刻=手机发送请求的时刻a+手机时刻B-手机时刻A+网络从手机到服务器的时长b

手机时刻A=手机发送请求的时刻a

手机时刻B=服务器接收到请求的时刻c-网络从手机到服务器的时长b

服务器时刻x=手机发送请求的时刻a+服务器接收到请求的时刻c-网络从手机到服务器的时长b-手机发送请求的时刻a+网络从手机到服务器的时长b

x=a+c-b-a+b

x=c

推算出来的时候,

连我自己都震惊到了,

简直太正确了

再次推导

手机时间误差=手机时刻B-手机时刻A

手机时刻A=手机发送请求的时刻a

手机时刻B=服务器接收到请求的时刻c-网络从手机到服务器的时长b

手机时间误差=服务器接收到请求的时刻c-网络从手机到服务器的时长b-手机发送请求的时刻a

发送一次请求以后,服务器会返回服务器的时间,我们就可以求出手机时间误差,然后我们把误差结果存起来

继续推导

服务器时刻=手机时刻+网络从手机到服务器的时长b

服务器时刻=手机当前时间+手机时间误差+网络从手机到服务器的时长b

这次推导就对了

发送一次请求后,我们可以推导出什么

网络从手机到服务器的时长手机时间误差

程序设计

用脚本引擎启动一个单独的脚本,每隔一定时间,去校正一下两个值,并且用本地存储存起来

网络从手机到服务器的时长手机时间误差

每当要获取服务器的时间,我们就可以读取本地存储,直接用公式计算出服务器的时间,而不用去请求服务器

服务器时刻=手机当前时间+手机时间误差+网络从手机到服务器的时长b

代码

ui;

const一般文字大小=22sp;

ui.layout(

vertical

texttext=牙叔教程简单易学textStyle=boldtextSize=30spw=*gravity=center/text

verticalmargin=6

texttext=服务器时间textSize={{一般文字大小}}/text

textid=服务器时间/text

/vertical

verticalmargin=6

texttext=手机本地时间textSize={{一般文字大小}}/text

textid=手机本地时间/text

/vertical

verticalmargin=6

texttext=服务器推导的手机时间textSize={{一般文字大小}}/text

textid=服务器推导的手机时间/text

/vertical

horizontalmargin=6

texttext=手机时间误差(毫秒)textSize={{一般文字大小}}/text

textid=手机时间误差/text

/horizontal

horizontalmargin=6

texttext=网络从手机到服务器的时长textSize={{一般文字大小}}/text

textid=网络从手机到服务器的时长/text

/horizontal

buttonid=校正时间校正时间/button

/vertical

);

ui.校正时间.click(function(){

leturl=


转载请注明:http://www.aierlanlan.com/tzrz/1447.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了