客户端服务器时间同步手机ftp客户端


需要解决的问题很简单,就是如何在页面上比较准确的显示服务器时间。目前比较常用的方法就是根据基准时间使用setTimeout或setInterval来计算最新的时间,这样的问题在于setTimeout与setInterval的时间精度比较低,经测试一分钟大概能相差几秒(与电脑性能以及运行的任务也相关),这样的精度在某些需求下是无法满足的。除此之外,如果要获得比较准确的时间可以定期与服务器进行校准,只是这样实现的成本大一些。



1.为了解决原方案中的时间精度问题,这里不再使用setTimeout和setInterval来直接计算时间,而是直接使用客户端时间(CT)。不过客户端时间很可能与服务器时间(ST)不同步,这需要在页面加载的时候计算出客户端与服务器的时间差值(ΔT),这样只需在客户端时间上做一下修正即可得到准确的服务器时间(ST’=CT-ΔT)。



2.由于客户端时间很可能被用户修改,因此直接按照步骤1中的方式计算,一旦用户修改了时间,计算出来的服务器时间也将随之发生变化。这就需要检测出客户端时间的变化并消除这个变化。检测的方法很简单,即在每个计算周期(T)都将当时的客户端时间(CT2)与上一个周期的客户端时间(CT1)做比较,一旦两个周期的差值(ΔT’=CT2-CT1-T)大于某个预设值(S)时就将差值(ΔT’)加入到ΔT中,即此时的ΔT=Δ
T ΔT’。之所以需要设置一个预设值,是因为每个周期的时间本身不是固定的(依赖于setTimeout),因此ΔT’并不会等于

0,如果每次都将setTimeout造成的误差作为CT与ST之间的误差将会造成计算不准确。经过以上的计算,用户修改时间后将不会对计算结果产生影响。



3.经JK提醒,完成以上两步还有一个问题,当用户离开当前页面之后后退回页面时,时间计算不准确。问题在于基准时间是服务器给的,在第一次进入页面的时候确定,当用户后退回当前页面时,基准时间并没有变,这样会导致重新从过期的基准时间开始计算,导致不准确。需要解决这个问题就是需要解决跨页面的数据存储问题,这在之前的《Ajax应用中浏览器历史的兼容性解决方案》一文中已经说明,即通过表单元素来记忆。具体的实现方案是,页面第一次加载时创建两个input,一个用于存储最近一次的客户端时间,一个用于存储最近一次的基准时间。如果发现已经存在input(前进、后退、非强制刷新)则比较上一次的客户端时间与当前客户端时间,如果其差值大于某个预设值则像步骤2中一样进行校准,只不过使用的将是最新的基准值。



1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。

2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。