美文网首页Android开发经验谈Android知识
Android客户端与服务器时间同步

Android客户端与服务器时间同步

作者: 无玄 | 来源:发表于2017-09-04 17:29 被阅读1163次

问题点

越来越多的业务场景需要根据服务器时间进行本地的展示,就有了这样这样一些问题:
a. 服务器时间接口频繁调用。使用服务器时间的业务模块较多时,每次使用都要调用一次服务器时间接口;
b. 业务阻断。调用服务器时间期间,本地业务展示需等待服务端时间接口调用;
c. 服务端时间接口调用时的时间消耗。在调用服务器时间接口时存在网络上,以及服务器处理的时间消耗。

如何在误差允许范围内优化这些问题?

优化方案

现考虑如下一种优化方案:

  1. 服务器时间接口频繁调用和业务阻断。在APP启动时,调用服务端时间接口,计算服务端时间接口和本地时间差值,在使用服务器时间时根据差值和本地时间计算实际的服务器时间。
  2. 服务端时间接口调用时的时间消耗。参考NTP协议,可以优化这个问题。
    NTP原理如下:


    1096626509281939420.jpg

    系统时钟同步的工作过程如下:
    Device A发送一个NTP报文给Device B,该报文带有它离开Device A时的时间戳,该时间戳为10:00:00am(T1)。
    当此NTP报文到达Device B时,Device B加上自己的时间戳,该时间戳为11:00:01am(T2)。
    当此NTP报文离开Device B时,Device B再加上自己的时间戳,该时间戳为11:00:02am(T3)。
    当Device A接收到该响应报文时,Device A的本地时间为10:00:03am(T4)。
    至此,Device A已经拥有足够的信息来计算两个重要的参数:
    NTP报文的往返时延Delay=(T4-T1)-(T3-T2)=2秒。
    Device A相对Device B的时间差offset=((T2-T1)+(T3-T4))/2=1小时。

存在的问题

如果用户切到后台修改了本地时间,或者通过其他方式同步了客户端时间,会造成最终获取到的时间存在误差。
可采用如下两种方式进行优化:

  1. 监听时间修改;
  2. 使用SystemClock.elapsedRealtime()。SystemClock.elapsedRealtime()获取的时间时从手机boot后到现在的时间,跟系统时间设置无关。

相关文章

  • Lua处理时区和夏令时问题

    一般游戏都会在登录时把服务器时间戳同步到客户端,然后定时同步,保证客户端与服务器时间戳一致,在一些涉及时间的逻辑里...

  • Android客户端与服务器时间同步

    问题点 越来越多的业务场景需要根据服务器时间进行本地的展示,就有了这样这样一些问题:a. 服务器时间接口频繁调用。...

  • Ajax详细解释

    Ajax概述 1.同步与异步 同步:客户端与服务器端的请求与响应是一个过程的,也就是说在过程完成前客户端都处于等待...

  • NTP集群服务器搭建

    NTP服务器 10.11.52 服务器需要能联网,从互联网的时间中心中同步时间。 NTP客户端 10.11.6.5...

  • MySQL主从同步、主从同步结构、复制模式

    MySQL主从同步 主从同步概述 实现数据自动同步的服务结构 主服务器:接受客户端访问连接 从服务器:自动同步主服...

  • iOS 客户端与服务端做时间同步

    需求 我们做客户端的时候,有时会需要对客户端与服务器的时间进行同步,比如抢购活动、倒计时等。这时我们要考虑如何准备...

  • JAVAEE——Ajax

    Ajax概述 什么是同步,什么是异步 同步现象:客户端发送请求到服务器端,当服务器返回响应之前,客户端都处于等待 ...

  • JavaScript Ajax和jQuery Ajax

    一、Ajax概述 1.什么是同步,什么是异步 同步现象:客户端发送请求到服务器端,当服务器返回响应之前,客户端都处...

  • 译:unet网络概述(3)

    状态同步 状态同步是从服务器到远程客户端完成的。本地客户端没有它的串行化数据,因为它与服务器共享场景。串行到本地客...

  • 游戏帧同步的基础概念

    两种帧同步方式1.状态同步:客户端发送游戏到服务器,服务器计算游戏行为的结果,然后通过广播下发各种状态,客户端收到...

网友评论

    本文标题:Android客户端与服务器时间同步

    本文链接:https://www.haomeiwen.com/subject/cbvejxtx.html