基于http的毫秒级时钟校准方法

文档序号:9219817阅读:1726来源:国知局
基于http的毫秒级时钟校准方法
【技术领域】
[0001]本发明涉及一种基于HTTP的毫秒级时钟校准方法,属于技术领域。
【背景技术】
[0002]在日常生活中,越来越多网站推出了抢购活动,例如淘宝、京东、当当等互联网企业推出的限时抢购活动,以及12306的网上售票等,吸引了越来越多用户参与其中。但是由于本机与目标主机之间的时间存在误差,导致慢人一步,抢购失败而大失所望,这样的例子随处可见。
[0003]随着大家对抢购活动的热衷程度不断加深,网上出现了大量的抢购软件。这些抢购软件利用频繁刷新和验证的手段进行抢购,然而这种方式一方面随着验证方式复杂性的增强,破解验证的难度也不断增加;另一方面频繁刷新对网站的服务器造成了极大的压力,以至于各大网站通过各种技术手段来遏制这种行为。根据新华社的最新采访,12306网站表示为了保证旅客购票和网站平稳运行,他们正在加大对恶意抢票软件的遏制和防控,并且取得了一定的效果。所以,这种通过频繁刷新和破解验证的手段并非是最优的选择。于是怎样提高准确度成为了解决这个问题的关键点。
[0004]目前,许多网站的抢购时间提示只精确到秒级别,不显示毫秒级的时间,即使部分网站页面上显示了看似精确的毫秒级时钟倒计时,但是该倒计时通常是使用Ja V a S c r i P t脚本在客户端浏览器上使用SetTimeout函数模拟显示出来的,受到JavaScript计时机制的影响,该时钟并不精确。鉴于抢购过程中毫秒级的误差往往决定了抢购能否成功。
[0005]解决网络时钟同步常用的手段是NTP的同步对时方式,该方式是基于NTP协议,由服务器向客户端发送带有时间戳的NTP包从而估计客户端与服务器之间的时间误差,诸如《基于NTP协议的网络时间同步系统的研宄与实现》、《高精度计算机网络时钟同步技术的研宄》、《网络时钟同步的研宄》等论文都对这种方式进行了深入研宄。但是,这种方式的不足在于依赖服务器端对NTP的支持,所以在服务器不提供NTP支持的情况下,该方法并不能获得客户端与服务器之间的时钟误差。

【发明内容】

[0006]本发明的目的在于克服现有技术中的不足,提供一种基于HTTP的毫秒级时钟校准方法,解决现有技术中目标网站仅显示到秒,对于毫秒级别的时间不能精确获取,导致本地主机与目标主机时钟不能同步精确到毫秒的技术问题。
[0007]为解决上述技术问题,本发明所采用的技术方案是:基于HTTP的毫秒级时钟校准方法,包括如下步骤:
[0008]步骤一:设置毫秒级时钟误差下限为tl,毫秒级时钟误差上限为t2,发送HTTP请求的毫秒级时间间隔为t,t = (t2-tl)/2 ;
[0009]步骤二:在本地时钟到达整数秒时,本地主机向目标主机发送第一个HTTP请求,记录本地主机发送时间sendTimel,接收到第一次响应时的本地主机时间backTimel以及目标主机发送响应的时间serverTimel ;
[0010]步骤三:等待一个时间间隔t,使本地主机向目标主机发送第二个HTTP请求,记录本地主机发送时间sendTime2,接收到第二次响应时的本地主机时间backTime2以及目标主机发送响应的时间serverTime2 ;
[0011]步骤四:根据sendTimel、backTimel计算网络单向时延OWD,OffD =(backTimel-sendTimel)/2 ;
[0012]步骤五:计算秒级误差Δ??:计算backTimel-serverTimel-OWD,取计算结果的值向上取整赋值给Atl ;
[0013]步骤六:若Λ 11>0,表示本地主机时间比目标主机时间快,则转到步骤七;
[0014]若Atl彡0,表示本地主机时间比目标主机时间慢或者同步,则转到步骤八;
[0015]步骤七:若serverTimel年serverTime2,则毫秒级误差Δ t2在tl至t之间,将t赋给t2,再将新的tl、t2的中点作为新的t,即t2 = t,t = (tl+t2)/2 ;
[0016]若serverTimel == serverTime2,则毫秒级误差Δ t2在t至t2之间,将t赋给tl,再将新的tl、t2的中点作为新的t,即tl = t,t = (tl+t2)/2 ;跳转到步骤九;
[0017]步骤八:若serverTimel年serverTime2,则毫秒级误差Δ t2在t至t2之间,将t赋给tl,再将新的tl、t2的中点作为新的t,即tl = t,t = (tl+t2)/2 ;
[0018]若serverTimel == serverTime2,则毫秒级误差Δ?2在tl至t之间,将t赋给t2,再将新的tl、t2的中点作为新的t,即t2 = t,t = (tl+t2)/2 ;跳转到步骤九;
[0019]步骤九:若tl Φ t2,则跳转至步骤二 ;若tl = = t2,则At2 = tl,进入下一步;
[0020]步骤十:若Atl>0,输出时钟误差At = Atl+At2 ;若Atl彡0,输出时钟误差At= Δ tl- Δ t2 ;
[0021]步骤^^一:根据时钟误差调整本地主机时间,消除本地主机与目标主机之间的时间差。
[0022]所述毫秒级时钟误差下限tl = 0ms,毫秒级时钟误差上限t2 = 1000ms,发送HTTP请求的毫秒级时间间隔t = 500msο
[0023]所述目标主机发送响应的时间是通过解析接收到的HTTP响应中的Data字符串得到的。
[0024]所述本地主机发送时间、接收到响应时的本地主机时间和目标主机发送响应时间均采用UTC格式。
[0025]与现有技术相比,本发明所达到的有益效果是:(I)该发明能够将本机与目标主机的之间的误差精确到毫秒级别;(2)按照HTTP协议规范,服务器返回的响应数据头信息中包含有精确到秒的时间,因此本发明可以与任何网站服务器进行时钟校准;(3)使用二分法估计毫秒级误差,仅需要进行10次左右的交互即可以将误差确定到毫秒级别,且本地主机每秒只与目标主机进行一次交互,在提高效率的同时也不会对服务器造成过大压力,应用于网站购票能够提高购票成功率,具有较好的实用价值和市场推广前景。
【附图说明】
[0026]图1是本发明中时钟误差计算流程图。
[0027]图2是Atl>0时,网络通信图。
[0028]图3是Atl彡O时,网络通信图。
[0029]图中:每格代表I秒,At表示总时间误差;Δ tl表示秒级误差;Δ t2表示毫秒级误差。
【具体实施方式】
[0030]本发明充分利用现有HTTP协议中的机制,无需增加客户端和服务器之间额外通信开销即可有效解决客户端时间和服务器时间的同步问题,将本地主机与目标主机之间的同步精确度提尚到晕秒级别。
[0031]作为本发明的一个实施例,采用Java编程语言以Windows作为运行环境,主要由预处理模块、时钟误差计算模块、时钟校准模块组成。
[0032]预处理模块为了将获取的本地主机时间精确到毫秒,使用Windows多媒体时钟:调用Windows系统API的timeGetTime函数,从而获得从Windows启动开始所经历的时间(精度为毫秒),进而得到本地主机精确到毫秒的准确时间。
[0033]假设本地主机与目标主机之间的时间误差为At,At可定义为两部分:At =Atl+At2,其中Atl为秒级别的误差,Λ t2为毫秒级别的误差。假定测算过程中毫秒级误差At2的误差范围是tl至t2,且计算过程中tl、t2精确到毫秒。为了计算方便,本发明中本地主机发送时间、接收到响应时的本地主机时间和目标主机发送响应时间均采用UTC格式存储,即自1970年I月I日O时O分O秒以来的毫秒数。
[0034]下面结合附图对本发明作进一步描述。
[0035]如图1所示,为本发明中时钟误差计算方法,包括如下步骤:
[0036]步骤一:设置毫秒级时钟误差下限为tl,毫秒级时钟误差上限为t2,发送HTTP请求的毫秒级时间间隔为t,t = (t2-tl)/2 ;本发明中,毫秒级时钟误差下限tl = 0ms,毫秒级时钟误差上限t2 = 1000ms,发送HTTP请求的毫秒级时间间隔t = 500ms。
[0037]步骤二:利用URLConnect1n的实例化对象调用getOutputStream函数,在本地时钟到达整数秒时,本地主机向目标主机发送第一个HTTP请求,通
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1