一种时间校准方法、装置及计算机存储介质与流程

文档序号:19123774发布日期:2019-11-13 01:55阅读:273来源:国知局
一种时间校准方法、装置及计算机存储介质与流程

本申请实施例涉及通讯技术领域,特别涉及一种时间校准方法、装置及计算机存储介质。



背景技术:

信息科学的快速发展及其在社会各个领域中日益广泛的应用,对现代社会的发展起到了极大的推动作用。现有的分布式信息系统以及有关重要应用领域中,需要依靠计算机的高可用性和高效率来精确控制关键性的工作于任务,同时对系统内各种应用平台、服务器和用户终端等时钟的一致性和精确性有较高的要求。

在分布式系统中,统一时间服务是一个非常基础的服务设施,通常许多服务和业务逻辑的实现依赖于统一的时间,比如:定时任务、具有时效性的数据采集、数据对账和数据流处理等等。如果没有一套统一的时间校准机制,分布式系统中的各节点必将出现时序错乱,从而导致业务逻辑或服务的错误和异常。

现有的分布式系统中,需要在每个节点中统一部署网络策略以支持节点与时间服务器之间的时间校准,部署的复杂度较高,运维成本大。



技术实现要素:

为了降低分布式系统中网络策略的部署和运维复杂度,本申请实施例提供了一种时间校准方法、装置及计算机存储介质。所述技术方案如下:

根据本申请实施例的第一方面,提供了一种时间校准方法,该方法包括:

心跳服务器接收节点发送的心跳请求消息;

所述心跳服务器生成心跳响应消息中,所述响应消息中包含所述心跳服务器的本地时间添加,所述心跳服务器的本地时间与时间服务器的时间同步;

所述心跳服务器向所述节点发送所述心跳响应消息,以使所述节点根据所述心跳服务器的本地时间校准所述节点的本地时间。

一种可选的实施例中,所述心跳服务器的本地时间根据以下方式与时间服务器的时间同步:

所述心跳服务器通过ntp网络时间协议向所述时间服务器发送ntp报文;

所述心跳服务器接收所述时间服务器发送的ntp响应报文,所述ntp响应报文中包含所述时间服务器的时间;

所述心跳服务器根据所述时间服务器的时间同步所述心跳服务器的本地时间。

一种可选的实施例中,所述心跳请求消息中包含校准请求信息,所述心跳服务器生成所述心跳响应消息之前,还包括:

所述心跳服务器根据所述校准请求信息,确认所述心跳服务器的本地时间。

一种可选的实施例中,所述心跳服务器接收节点发送的心跳请求消息之后,所述心跳服务器生成心跳响应消息之前,还包括:

所述心跳服务器确定接收到所述心跳请求消息的接收时间点;

所述心跳服务器确定所述接收时间点位于预设时间段之内。

根据本申请实施例的第一方面,提供了一种时间校准方法,包括:

节点向心跳服务器发送心跳请求消息;

所述节点接收所述心跳服务器发送的心跳响应消息,所述心跳响应消息中包含所述心跳服务器的本地时间,所述心跳服务器的本地时间与时间服务器的时间同步;

所述节点根据所述心跳服务器的本地时间校准所述节点的本地时间。

一种可选的实施例中,所述节点为区块链节点;

所述节点向心跳服务器发送心跳请求消息之前,还包括:

所述区块链节点在所述心跳请求消息中添加第一时间戳;

所述节点接收所述心跳服务器发送的心跳响应消息之后,还包括:

所述区块链节点确定接收到所述心跳响应消息的第二时间戳;

所述区块链节点根据所述心跳服务器的本地时间校准所述区块链节点的本地时间,包括:

所述区块链节点确定所述区块链节点的当前时钟值;

所述区块链节点根据所述第一时间戳和所述第二时间戳,计算所述心跳服务器的本地时间对应的系统时钟值;

所述区块链节点根据所述当前时钟值和所述系统时钟值,确定时间增量;

所述区块链节点根据所述心跳服务器的本地时间和所述时间增量,确定所述区块链节点的本地时间。

一种可选的实施例中,所述节点的本地时间根据以下公式确定:

curr_unifide_time=sys_unified_time+f[t2-(p1+p2)/2]

其中,curr_unifide_time为所述节点的本地时间;sys_unified_time为所述心跳服务器的本地时间;t2为所述节点的当前时钟值;p1为所述第一时间戳;p2为所述第二时间戳;f()为时钟单位转换的函数。

一种可选的实施例中,所述节点向心跳服务器发送心跳请求消息之前,还包括:

所述节点生成所述心跳请求消息,所述心跳请求消息中包含校准请求信息。

根据本申请实施例的第三方面,提供了一种时间校准装置,所述装置包括:

第一接收模块,用于接收节点发送的心跳请求消息;

第一生成模块,用于生成心跳响应消息,所述心跳响应消息中包含所述心跳服务器的本地时间,所述心跳服务器的本地时间与时间服务器的时间同步;

第一发送模块,用于向所述节点发送所述心跳响应消息,以使所述节点根据所述心跳服务器的本地时间校准所述节点的本地时间。

一种可选的实施例中,还包括同步模块,用于根据以下方式将所述心跳服务器的本地时间与时间服务器的时间同步:

通过ntp网络时间协议向所述时间服务器发送ntp报文;

接收所述时间服务器发送的ntp响应报文,所述ntp响应报文中包含所述时间服务器的时间;

根据所述时间服务器的时间同步所述心跳服务器的本地时间。

一种可选的实施例中,所述心跳请求消息中包含校准请求信息;

第一生成模块,还用于根据所述校准请求信息,确认所述心跳服务器的本地时间。

一种可选的实施例中,第一生成模块,还用于:

确定接收到所述心跳请求消息的接收时间点;

确定所述接收时间点位于预设时间段之内。

根据本申请实施例的第四方面,提供了一种时间校准装置,所述装置包括:

第二发送模块,用于向心跳服务器发送心跳请求消息;

第二接收模块,用于接收所述心跳服务器发送的心跳响应消息,所述心跳响应消息中包含所述心跳服务器的本地时间,所述心跳服务器的本地时间与时间服务器的时间同步;

校准模块,用于根据所述心跳服务器的本地时间校准所述节点的本地时间。

一种可选的实施例中,第二发送模块,还用于在所述心跳请求消息中添加第一时间戳;

第二接收模块,还用于确定接收到所述心跳响应消息的第二时间戳;

校准模块,具体用于确定所述节点的当前时钟值;根据所述第一时间戳和所述第二时间戳,计算所述心跳服务器的本地时间对应的系统时钟值;根据所述当前时钟值和所述系统时钟值,确定时间增量;根据所述心跳服务器的本地时间和所述时间增量,确定所述节点的本地时间。

一种可选的实施例中,校准模块,具体用于根据以下公式确定所述节点的本地时间:

curr_unifide_time=sys_unified_time+f[t2-(p1+p2)/2]

其中,curr_unifide_time为所述节点的本地时间;sys_unified_time为所述心跳服务器的本地时间;t2为所述节点的当前时钟值;p1为所述第一时间戳;p2为所述第二时间戳;f()为时钟单位转换的函数。

一种可选的实施例中,还包括第二生成模块,用于生成所述心跳请求消息,所述心跳请求消息中包含校准请求信息。

根据本申请实施例的第五方面,提供了一种时间校准系统,所述系统包括心跳服务器和至少一个节点;

所述节点,用于向心跳服务器发送心跳请求消息;

所述心跳服务器,用于接收节点发送的心跳请求消息;生成心跳响应消息,所述心跳响应消息中包含所述心跳服务器的本地时间,所述心跳服务器的本地时间与时间服务器的时间同步;向所述节点发送所述心跳响应消息;

所述节点,还用于接收所述心跳服务器发送的心跳响应消息;根据所述心跳服务器的本地时间校准所述节点的本地时间。

根据本申请实施例的第五方面,提供了一种计算机存储介质,所述计算机存储介质中存储有计算机可执行指令,所述计算机可执行指令用于执行本申请实施例所述的时间校准方法。

本申请实施例,心跳服务器接收节点发送的心跳请求,心跳服务器针对心跳请求生成心跳响应消息,并在心跳响应消息中包含心跳服务器的本地时间,其中心跳服务器的本地时间与时间服务器的时间同步。心跳服务器向节点发送心跳响应消息,节点接收到心跳响应消息后,可以根据其中包含的心跳服务器的本地时间校准节点的本地时间。由于在分布式系统中,为了确认节点的存活情况,会设置心跳服务器接收节点发送的心跳请求。本申请实施例中,心跳服务器不仅用于确认节点存活情况,还利用心跳服务器的本地时间对各节点的本地时间进行校准,只需在心跳服务器反馈节点的心跳响应消息中添加心跳服务器的本地时间,节点即可根据接收到的心跳响应消息校准节点的本地时间。这样,仅需在心跳服务器中部署与时间服务器对应的网络策略,而节点由于无需直接与时间服务器进行时间校准,节点中可以不部署对应的网络策略,从而降低了网络策略部署和运维的复杂程度。此外,由于时间服务器只需与心跳服务器连接,减少了时间服务器的工作量,降低了时间服务器的网络压力。同时,节点与心跳服务器之间利用心跳响应进行时间校准,无需另外增加信令,从而减少了整个网络中的信令数量,降低了网络压力。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1示出了本申请一个实施例提供的时间校准系统的系统架构图;

图2示出了现有技术中的时间校准系统的系统架构图;

图3示出了本申请实施例提供的一种时间校准方法的流程图;

图4示出了本申请一个具体实施例提供的时间校准方法的流程图;

图5示出了本申请另一个具体实施例提供的时间校准方法的流程图;

图6示出了本申请再一个具体实施例提供的时间校准方法的流程图;

图7示出了本申请又一个具体实施例提供的时间校准系统的系统架构图;

图8示出了本申请一个实施例提供的时间校准装置的结构方框图;

图9示出了本申请一个实施例提供的时间校准装置的结构方框图;

图10示出了本申请一个实施例提供的服务器的结构方框图;

图11示出了本申请一个实施例提供的终端的结构方框图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。

在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。

为了方便理解,下面对本申请实施例中涉及的名词进行解释:

ntp:(networktimeprotocol,网络时间协议)是由rfc1305定义的时间同步协议,用来在分布式时间服务器和客户端之间进行时间同步。ntp基于udp(用户数据报协议,userdatagramprotocol)报文进行传输,使用的udp端口号为123。使用ntp的目的是对网络内所有具有时钟的设备进行时钟同步,使网络内所有设备的时钟保持一致,从而使设备能够提供基于统一时间的多种应用。

网络策略:为一组定义允许或拒绝连接的有序规则,可以包括多条策略。网络策略由概述、条件、约束、设置属性组成。概述包括策略状态,即策略的启用与禁用,禁用等效于策略删除;访问权限,包括授予访问权限和拒绝访问;是否忽略用户的拨入属性。条件包括“日期和时间”以及“用户组”,“日期和时间”标识每周允许用户连接的日期和时间,“用户组”标识用户所属的组。约束包括“身份验证方法”,标识客户端与服务器必须使用相同的身份验证才能连接成功。此外,网络策略的设置属性一般不做关注。

心跳机制:客户端每隔固定时间间隔发送一个心跳请求给服务器端,服务器端收到后回复一个心跳响应,如果服务器端设定时间内没有收到客户端的信息,则视客户端已断开。其中,发送方一般来说为客户端,但也可以是服务器端,即服务器定时轮询发送心跳包至客户端。发送心跳请求是为了保持长连接,至于请求中包含的内容没有特别规定,一般来说心跳请求都是数据量很小的数据包,或者只包含包头的一个空包。

cpu时钟:cpu(中央处理器,centralprocessingunit)内部有个石英晶振,其正常振动频率就是cpu的主频,时钟脉冲就是每次振动产生的脉冲,是整个cpu的时间工作基准。可以使用cpu时钟来同步cpu的不同进程。cpu中的电路可分为时序电路或组合逻辑电路。其中,时序逻辑设备上需要使用时钟。基本上,时序逻辑设备只能通过上升沿或下降沿来改变周期输出。cpu时钟信号有固定的时钟频率,时钟频率是时钟周期的倒数。在电子电路,尤其是与信号同步的数字电路,时钟信号是一种特殊信号振荡之间的高和低的状态。

请参考图1,其示出了本申请一个实施例提供的时间校准系统的系统架构图,该时间校准系统中包括时间服务器101、心跳服务器102和至少一个节点103。节点103可以为终端,可以是手机、平板电脑或者是专用的手持设备等具有无线通信功能的电子设备,也可以是个人计算机(personalcomputer,简称pc)、笔记本电脑等有线接入方式连接上网的设备。节点103也可以是服务器,可以是一个独立的设备,也可以是多个服务器所形成的服务器集群,优选的,可以采用云计算技术进行信息处理。

时间服务器101和/或心跳服务器102可以是计算机等网络设备。时间服务器101和/或心跳服务器102可以是一个独立的设备,也可以是多个服务器所形成的服务器集群。优选地,时间服务器101和/或心跳服务器102可以采用云计算技术进行信息处理。

节点103与心跳服务器102之间和/或心跳服务器102与时间服务器101之间通过有线或无线网络相连。可选地,上述的无线网络或有线网络使用标准通信技术和/或协议。网络通常为因特网、但也可以是任何网络,包括但不限于局域网(localareanetwork,lan)、城域网(metropolitanareanetwork,man)、广域网(wideareanetwork,wan)、移动、有线或者无线网络、专用网络或者虚拟专用网络的任何组合)。在一些实施例中,使用包括超文本标记语言(hypertextmark-uplanguage,html)、可扩展标记语言(extensiblemarkuplanguage,xml)等的技术和/或格式来代表通过网络交换的数据。此外还可以使用诸如安全套接字层(securesocketlayer,ssl)、传输层安全(transportlayersecurity,tls)、虚拟专用网络(virtualprivatenetwork,vpn)、网际协议安全(internetprotocolsecurity,ipsec)等常规加密技术来加密所有或者一些链路。在另一些实施例中,还可以使用定制和/或专用数据通信技术取代或者补充上述数据通信技术。

本申请实施例提供一种优选的实施方式,以节点为服务器为例进行介绍。

本申请实施例提供一种优选的实施方式,以时间服务器101为ntp时间服务器为例进行介绍。在一种可能的实施方式中,为了使心跳服务器102能够与时间服务器101进行交互,利用时间服务器101对心跳服务器102的本地时间进行校准,心跳服务器102中部署的网络策略支持ntp。ntp包括多种工作模式,较佳地,本申请实施例提供一种优选的方式中,心跳服务器102与时间服务器101以客户端-服务器的模式进行时间校准。相应的,时间服务器101对应为服务器,心跳服务器102对应为客户端。在客户端-服务器的模式下,客户端能同步到服务器,而服务器无法同步到客户端,也就是说,心跳服务器102利用时间服务器101的时间进行时间同步,而时间服务器101不根据心跳服务器102的本地时间进行时间同步。

本申请实施例提供一种优选的方式中,节点103与心跳服务器102以客户端-服务器的模式进行时间校准。相应的,心跳服务器102对应为服务器,节点103对应为客户端。在客户端-服务器的模式下,客户端能同步到服务器,而服务器无法同步到客户端,也就是说,节点103利用心跳服务器102的时间进行时间校准,而心跳服务器102不根据节点103的本地时间进行时间校准。同时,由于节点103不与ntp时间服务器直接相连,因此,节点103的网络策略中无需部署ntp协议。

这样,本申请实施例中,节点103利用心跳服务器102的本地时间对节点103的本地时间进行校准,而心跳服务器102的本地时间又与时间服务器101的时间同步,从而达到多个节点103之间的时间同步,且分布式系统的所有时间均同步的目的。

图2示出了现有技术中提供的分布式系统的系统架构图。由图2可以看出,现有技术的分布式系统中的各节点103直接与时间服务器101相连接,每个节点103均向时间服务器101发送ntp报文,从而利用时间服务器101的时间对各自的本地时间进行校准。为了支持节点103与时间服务器101之间的连接,每个节点103的网络策略均需支持ntp协议,网络策略的部署较为繁琐复杂。

此外,分布式系统中,为了确定各个节点101的连接状态,节点101还需与心跳服务器102连接,节点101每隔固定时间间隔需向心跳服务器102发送心跳包,从而使心跳服务器102确定节点103的连接状态。由此可见,节点103需要发送ntp报文和心跳包两种报文,整个分布式网络中的报文数量较多,网络压力较大。

为了解决上述问题,本申请实施例提供了一种时间校准方法,所述时间校准方法应用于心跳服务器,如图3所示,方法包括:

步骤301、心跳服务器接收节点发送的心跳请求消息。

一般来说,每个节点会每隔几分钟向心跳服务器发送一个心跳请求消息。这里的心跳请求消息可以为一个很小的数据包,或者为一个只包含包头的空包。具体实施过程中,可以为节点与心跳服务器预先约定,节点每隔设定时间间隔主动向心跳服务器发送一个心跳请求消息,若在规定时间内心跳服务器未收到节点发送的心跳请求消息,则认为该节点异常。例如,a节点与心跳服务器预先约定,a节点每隔10分钟向心跳服务器发送心跳请求消息。具体地,a节点分别在10:00:00am、10:10:00am、10:20:00am……向心跳服务器发送。由于心跳请求消息在发送过程中会有一定的延迟,因此,将规定时间设置为1分钟,即心跳服务器若在10:00:00am至10:01:00am的时间段内未收到a节点发送的心跳请求消息,则认为a节点出现了异常。

可选的,也可以为心跳服务器每隔设定时间间隔向每个节点发送一个心跳包,节点接收到心跳包后,立刻向心跳服务器反馈一个同样的心跳包,若在规定时间内,心跳服务器未收到节点反馈的心跳包,则认为该节点异常。例如,心跳服务器在11:00:00am向b节点发送一个心跳包,预设的规定时间为2分钟。则心跳服务器在11:00:00am至11:02:00am的时间段内未收到b节点反馈的心跳包,则认为b节点异常。这里,节点向心跳服务器反馈的心跳包也就是步骤301中的心跳请求消息。

步骤302、心跳服务器生成心跳响应消息,心跳响应消息中包含心跳服务器的本地时间,心跳服务器的本地时间与时间服务器的时间同步。

具体实施过程中,心跳服务器接收到心跳请求消息后,需要向对应的节点进行响应。一般来说,心跳服务器向节点发送的心跳响应消息可以与心跳请求消息一样,为一个只包含包头的空包。本申请实施例中,为了对节点的时间进行校准,心跳服务器与节点约定,在心跳响应消息中增加一个时间变量,用于记录心跳服务器的本地时间。具体操作可以是心跳服务器在生成心跳响应消息的时刻生成一个时间戳,并利用心跳响应消息的时间变量记录该时间戳。

步骤303、心跳服务器向节点发送心跳响应消息,以使节点根据心跳服务器的本地时间校准节点的本地时间。

由于心跳服务器的本地时间与时间服务器的时间相同步,则节点根据心跳服务器的本地时间校准节点的本地时间后,节点的本地时间也与时间服务器的时间相同步。

本申请实施例,心跳服务器接收节点发送的心跳请求,心跳服务器针对心跳请求生成心跳响应消息,并在心跳响应消息中包含心跳服务器的本地时间,其中心跳服务器的本地时间与时间服务器的时间同步。心跳服务器向节点发送心跳响应消息,节点接收到心跳响应消息后,可以根据其中包含的心跳服务器的本地时间校准节点的本地时间。由于在分布式系统中,为了确认节点的存活情况,会设置心跳服务器接收节点发送的心跳请求。本申请实施例中,心跳服务器不仅用于确认节点存活情况,还利用心跳服务器的本地时间对各节点的本地时间进行校准,只需在心跳服务器反馈节点的心跳响应消息中添加心跳服务器的本地时间,节点即可根据接收到的心跳响应消息校准节点的本地时间。这样,仅需在心跳服务器中部署与时间服务器对应的网络策略,而节点由于无需直接与时间服务器进行时间校准,节点中可以不部署对应的网络策略,从而降低了网络策略部署和运维的复杂程度。此外,由于时间服务器只需与心跳服务器连接,减少了时间服务器的工作量,降低了时间服务器的网络压力。同时,节点与心跳服务器之间利用心跳响应进行时间校准,无需另外增加信令,从而减少了整个网络中的信令数量,降低了网络压力。

由于节点是按预设频率向心跳服务器发送心跳请求消息,可选地,本申请实施例中,进行节点时间校准的频率与进行节点存活情况确认的频率可以一致,也可以不一致。具体来说,若节点时间校准的频率与节点存活情况确认的频率一致,就是说心跳服务器向节点发送的每一个心跳响应消息中均包含心跳服务器的本地时间。较佳地,为了减少心跳服务器的工作压力,也可以为针对同一个节点,心跳服务器发送的部分心跳响应消息中包含心跳服务器的本地时间。

举例来说,针对c节点,心跳服务器每隔三个心跳响应消息添加一次心跳服务器的本地时间,具体地,假如心跳服务器在9:00:01am接收到c节点发送的心跳请求消息c1,在9:10:01am接收到c节点发送的心跳请求消息c2,在9:20:01am接收到c节点发送的心跳请求消息c3,在9:30:01am接收到c节点发送的心跳请求消息c4,在9:40:01am接收到c节点发送的心跳请求消息c5。则心跳服务器向c节点发送的心跳响应消息中,在心跳请求消息c1对应的心跳响应消息c1’中添加心跳服务器的本地时间9:00:01am,在心跳请求消息c5对应的心跳响应消息c5’中添加心跳服务器的本地时间9:40:01am。

为了明确心跳服务器向节点发送的哪些心跳响应消息中包含心跳服务器的本地时间,由节点或者心跳服务器决定具体的选取规则。下面分别对由节点决定的方案以及由心跳服务器决定的方案进行详细介绍。

情况一,由节点决定包含心跳服务器的本地时间的心跳响应消息的选取规则。

则节点向心跳服务器发送心跳请求消息之前,还包括:

节点生成心跳请求消息,心跳请求消息中包含校准请求信息。

心跳请求消息中包含校准请求信息,心跳服务器生成心跳响应消息之前,还包括:

心跳服务器根据校准请求信息,确认心跳服务器的本地时间。

具体实施过程中,节点在生成心跳请求消息时,若需要心跳服务器反馈心跳服务器的本地时间,则会在心跳请求消息中添加校准请求信息。节点可以依据设定的频率或者预定的时间点确定在哪些心跳请求消息中添加校准请求信息。举例来说,节点确定每隔2个心跳请求消息添加一次校准请求信息,或者节点确定在每个整点向心跳服务器发送的心跳请求消息中添加校准请求信息。

校准请求信息的位置以及形式不限。一种具体的实施例中,节点在心跳请求消息的包头中添加一个特殊的字符号。心跳服务器解析接收到的心跳请求消息,确定该心跳请求消息的包头中包含该字符号,则获取当前心跳服务器的本地时间,并将心跳服务器的本地时间添加至心跳响应消息中。

另一种具体的实施例中,节点在心跳请求消息的包体中添加时间变量,若无需心跳服务器反馈心跳服务器的本地时间,则不为该时间变量赋值,即该时间变量为00:00:00;若需要心跳服务器反馈心跳服务器的本地时间,则将该时间变量赋值为当前节点的本地时间。心跳服务器接收到心跳请求消息,解析确定心跳请求消息中的时间变量,若时间变量为00:00:00,则不改变该时间变量的值,直接发送心跳响应消息。若时间变量不是00:00:00,则在心跳响应消息中时间变量的值改为心跳服务器的本地时间,再向节点进行发送。

这样,心跳服务器不用在每个心跳响应消息中都添加心跳服务器的本地时间,且仅需解析心跳请求消息,就可确定是否发送心跳服务器的本地时间,从而减轻了心跳服务器的工作压力。

情况二,由心跳服务器决定包含心跳服务器的本地时间的心跳响应消息的选取规则。

心跳服务器接收节点发送的心跳请求消息之后,心跳服务器生成心跳响应消息之前,还包括:

心跳服务器确定接收到心跳请求消息的接收时间点;

心跳服务器确定接收时间点位于预设时间段之内。

具体来说,心跳服务器与节点预先设定了节点发送心跳请求消息的频率或时间点,那么如果心跳服务器在某个时间点之后的超时时间段内未接受到该节点的心跳请求消息,则认为该节点异常。从而,本申请实施例可以利用这些超时时间段,将其中的某些超时时间段设置为预设时间段,心跳服务器针对在预设时间段内接收到的心跳请求消息,反馈心跳服务器的本地时间,而针对在预设时间段之外接收到的心跳请求消息,则不反馈心跳服务器的本地时间。

举例来说,d节点每隔10分钟向心跳服务器发送一个心跳请求消息,具体时间点为9:00:00am、9:10:00am、9:20:00am……10:00:00am、10:10:00am、10:20:00am……。若超时时间设置为30秒,则超时时间段为9:00:00am-9:00:30am、9:10:00am-9:10:30am、9:20:00am-9:20:30am……10:00:00am-10:00:30am、10:10:00am-10:10:30am、10:20:00am-10:20:30am……,即心跳服务器会在这些超时时间段内分别接收到d节点发送的心跳请求消息。若在某个超时时间段内未接收到d节点发送的心跳请求消息,则认为d节点异常。

进一步地,一种具体的实施例中,心跳服务器将部分超时时间段设置为预设时间段。例如每隔半小时将一个超时时间段设置为预设时间段,即将上述超时时间段中的9:00:00am-9:00:30am、9:30:00am-9:30:30am、10:00:00am-10:00:30am、10:30:00am-10:30:30am……设置为预设时间段。这样,心跳服务器接收到心跳请求消息时,确定接收到心跳请求消息的接收时间点,并判断该接收时间点是否位于预设时间段内。若位于预设时间段内,则将针对该心跳请求消息,确定当前的心跳服务器的本地时间,并将心跳服务器的本地时间添加入心跳响应消息中。

例如,心跳服务器确定接收到心跳请求消息d1的接收时间点为9:30:08am,判断位于预设时间段9:30:00am-9:30:30am之内,则心跳服务器获取当前心跳服务器的本地时间,假若为9:30:09am,并将心跳服务器的本地时间9:30:09am加入心跳响应消息d1’中。

又如,心跳服务器确定接收到心跳请求消息d2的接收时间点为9:20:05am,判断其不位于预设时间段内,则心跳服务器可以直接向d节点发送心跳响应消息,该心跳响应消息中不包含心跳服务器的本地时间。

由心跳服务器决定具体的选取规则,则心跳服务器可以针对不同的节点和/或不同时间段的工作量,统筹安排向不同节点反馈心跳服务器的本地时间的频率和具体时间点,从而可以均衡心跳服务器的工作量。

本申请实施例中,在利用心跳服务器的本地时间进行节点时间校准时,为了保证心跳服务器的本地时间的准确性,心跳服务器会利用时间服务器进行时间同步。

心跳服务器的本地时间根据以下方式与时间服务器的时间同步:

心跳服务器通过ntp网络时间协议向时间服务器发送ntp报文;

心跳服务器接收时间服务器发送的ntp响应报文,ntp响应报文中包含时间服务器的时间;

心跳服务器根据时间服务器的时间同步心跳服务器的本地时间。

具体实施过程中,心跳服务器与时间服务器之间通过网络相连,心跳服务器与时间服务器都维护各自独立的时钟。为了便于理解,假设时间同步之前,心跳服务器的本地时间为10:00:00am,时间服务器的本地时间为11:00:00am。心跳服务器为了使自己的本地时间与时间服务器的时间同步,心跳服务器向时间服务器发送ntp报文,假设ntp报文在心跳服务器与时间服务器之间单向传输所需的时间为1秒。

该ntp报文带有离开心跳服务器的时间戳,该时间戳为10:00:00am。当该ntp报文到达时间服务器时,时间服务器在ntp报文中加上自身的时间戳,为11:00:01am。当此ntp报文离开时间服务器时,时间服务器在ntp报文中再加上时间戳作为ntp响应报文,该时间戳为11:00:02am。当心跳服务器接收到ntp响应报文时,心跳服务器的本地时间为10:00:03am。这样,心跳服务器可以利用上述时间戳来计算报文在心跳服务器与时间服务器之间往返的时间,为2秒;以及心跳服务器相对于时间服务器的时间差,为1小时。这样,心跳服务器就能够根据这些信息来更改自身的本地时间,以使心跳服务器的本地时间与时间服务器的时间同步。

另一方面,心跳服务器与时间服务器之间还可以基于其它协议进行时间同步,例如sntp(简单网络时间协议,simplenetworktimeprotocol)等。此时时间服务器为sntp时间服务器,心跳服务器的网络策略中支持sntp协议。

需要说明的是,如果心跳服务器确定心跳服务器的本地时间与时间服务器的时间之间没有时间差,则心跳服务器无需更改心跳服务器的本地时间。

此外,在心跳服务器中,生成心跳响应消息和生成ntp报文为两个进程分别执行,因此两者互不影响。同时,由于心跳服务器利用时间服务器进行时间同步,与节点利用心跳服务器进行时间校准,均为周期性的过程,因此每次时间同步可以在时间校准之前,也可以在时间校准之后,也可以两者同时进行。

对应的,本申请实施例中,应用于节点侧的时间校准方法包括:

节点向心跳服务器发送心跳请求消息;

节点接收心跳服务器发送的心跳响应消息,心跳响应消息中包含心跳服务器的本地时间,心跳服务器的本地时间与时间服务器的时间同步;

节点根据心跳服务器的本地时间校准节点的本地时间。

具体过程与上述应用于心跳服务器的时间校准方法相对应,这里不做赘述。

进一步地,本申请中的节点还可以为区块链节点。为了减小消息发送过程造成的误差,各区块链节点在接收到心跳响应消息后,会根据发送心跳请求消息以及接收心跳响应消息的时间点,与校准心跳服务器的本地时间一同校准节点的本地时间。

节点向心跳服务器发送心跳请求消息之前,还包括:

节点在心跳请求消息中添加第一时间戳;

节点接收心跳服务器发送的心跳响应消息之后,还包括:

节点确定接收到心跳响应消息的第二时间戳;

节点根据心跳服务器的本地时间校准节点的本地时间,包括:

节点确定节点的当前时钟值;

节点根据第一时间戳和第二时间戳,计算心跳服务器的本地时间对应的系统时钟值;

节点根据当前时钟值和系统时钟值,确定时间增量;

节点根据心跳服务器的本地时间和时间增量,确定节点的本地时间。

具体实施过程中,心跳响应消息中包含的心跳服务器的本地时间,对应的是心跳服务器生成心跳响应消息那一时刻的时间戳。由于从心跳服务器生成心跳响应消息,到节点接收到该心跳响应消息,存在一定的时间增量,因此节点利用心跳响应消息中心跳服务器的本地时间进行时间校准时,需要将这个时间增量考虑进去。本申请实施例中,利用前后两个时刻的cpu时钟差值来表示这个时间增量,这两个cpu时钟分别为节点的当前时钟值,以及心跳服务器生成心跳响应消息时心跳服务器的cpu时钟值,即系统时钟值,这个系统时钟值也对应于心跳响应消息中包含的心跳服务器的本地时间。此外,由于节点无法确定心跳服务器生成心跳响应消息时心跳服务器的cpu时钟值,从而本申请实施例中节点利用第一时间戳和第二时间戳估算系统时钟值。其中,第一时间戳为节点发送心跳请求消息时,节点的cpu时钟值;第二时间戳为节点接收到心跳响应消息时,节点的cpu时钟值。

假设消息在节点与心跳服务器之间往返的时耗相等,将第一时间戳记为p1,第二时间戳记为p2,则系统时钟值t1可以利用以下公式进行估算:

t1=(p1+p2)/2……公式1

节点的本地时间的校准值可以根据以下公式计算:

curr_unified_time=sys_unified_time+f(t2–t1)……公式2

其中,curr_unified_time为节点的本地时间;sys_unified_time为心跳响应消息中包含的心跳服务器的本地时间;t1为心跳服务器生成心跳响应消息时心跳服务器的cpu时钟值,即系统时钟值;t2为节点的当前时钟值;f为cpu时钟单位到时间单位转换的函数。

将上述公式1代入公式2中,则得到节点的本地时间的校准值为:

curr_unified_time=sys_unified_time+f[t2–(p1+p2)/2]……公式3

同样的,若节点的本地时间等于公式3中的校准值,则无需进行更改,若节点的本地时间不等于公式3中的校准值,则需要将节点的本地时间改为如公式3中的校准值。

下面以具体实施例对上述流程进行详细介绍。

实施例一提供了一种具体的实施过程,其系统架构包括ntp时间服务器、心跳服务器和节点,其中,步骤411至步骤414为心跳服务器利用ntp服务器进行时间同步的过程,步骤421至步骤428为节点利用心跳服务器进行时间校准的过程,两个过程之间不限定先后关系。总的方法如图4所示,包括:

步骤411、心跳服务器向ntp时间服务器发送ntp报文。

步骤412、ntp时间服务器生成ntp响应报文,并将ntp时间服务器的时间加入ntp响应报文中。

步骤413、ntp时间服务器将ntp响应报文向心跳服务器发送。

步骤414、心跳服务器根据ntp时间服务器的时间,同步心跳服务器的本地时间。

步骤421、节点生成心跳请求消息,并在心跳请求消息中添加第一时间戳。

步骤422、节点向心跳服务器发送心跳请求消息。

步骤423、心跳服务器获取心跳服务器的本地时间。

步骤424、心跳服务器生成心跳响应消息,心跳响应消息中包含心跳服务器的本地时间。

步骤425、心跳服务器向节点发送心跳响应消息。

步骤426、节点在心跳请求消息中添加第二时间戳。

步骤427、节点根据第一时间戳、第二时间戳和心跳服务器的本地时间,确定节点的本地时间的校准值。

步骤428、节点根据校准值校准节点的本地时间。

实施例二提供了另一种具体的实施过程,其系统架构包括心跳服务器和节点,方法如图5所示,包括:

步骤501、节点向心跳服务器发送心跳请求信息。

步骤502、心跳服务器确定接收到心跳请求信息的接收时间点。

步骤503、心跳服务器判断接收时间点是否位于预设时间段之内,若是执行步骤504,否则执行步骤505。

步骤504、心跳服务器获取心跳服务器的本地时间,并生成心跳响应消息,心跳响应消息中包含心跳服务器的本地时间。

步骤505、心跳服务器生成心跳响应消息。

步骤506、心跳服务器将心跳响应消息向节点发送。

步骤507、节点判断心跳响应消息中是否包含心跳服务器的本地时间,若是,则执行步骤508,否则结束当前流程。

步骤508、节点根据心跳服务器的本地时间对节点的本地时间进行校准。

实施例三提供了再一种具体的实施过程,其系统架构包括心跳服务器和节点,方法如图6所示,包括:

步骤601、节点生成心跳请求信息,并根据预设时间点,确定是否在心跳请求信息中添加特殊字符。

步骤602、节点向心跳服务器发送心跳请求信息。

步骤603、心跳服务器确定接收到心跳请求信息中是否包含特殊字符,若是执行步骤604,否则执行步骤605。

步骤604、心跳服务器获取心跳服务器的本地时间,并生成心跳响应消息,心跳响应消息中包含心跳服务器的本地时间。

步骤605、心跳服务器生成心跳响应消息。

步骤606、心跳服务器将心跳响应消息向节点发送。

步骤607、节点判断心跳响应消息中是否包含心跳服务器的本地时间,若是,则执行步骤608,否则结束当前流程。

步骤608、节点根据心跳服务器的本地时间对节点的本地时间进行校准。

实施例四提供了又一种具体的实施过程,应用于区块链系统中,其系统架构如图7所示包括ntp时间服务器701、心跳服务器702和多个区块链节点703,其中,区块链节点703可以为终端也可以为服务器,任意两个区块链节点703之间通过区块链网络进行连接,每个区块链节点703均通过区块链网络与心跳服务器702相连。心跳服务器702与ntp时间服务器701通过网络相连。针对任一区块链节点,该方法包括:

步骤711至步骤714与步骤411至步骤414类似,这里不做赘述。

步骤721、区块链节点生成心跳请求消息,并在心跳请求消息中添加第一时间戳。

步骤722、区块链节点在约定的时间点向心跳服务器发送心跳请求消息。

步骤723、心跳服务器接收到心跳请求消息后,获取心跳服务器的本地时间。

步骤724、心跳服务器生成心跳响应消息,心跳响应消息中包含心跳服务器的本地时间。

步骤725、心跳服务器向对应的区块链节点发送心跳响应消息。

步骤726、区块链节点接收到心跳响应消息后,在心跳请求消息中添加第二时间戳。

步骤727、区块链节点根据第一时间戳、第二时间戳和心跳服务器的本地时间,确定区块链节点的本地时间的校准值。

步骤728、区块链节点根据校准值校准节点的本地时间。

需要说明的是,本申请实施例中涉及的ntp时间服务器中时间服务器的时间获取等具体流程并未详细介绍,本领域技术人员可以清楚地了解本申请实施例中相关的具体时间同步过程,本申请实施例中不再赘述。

下述为本申请装置实施例,对于装置实施例中未详尽描述的细节,可以参考上述一一对应的方法实施例。

请参考图8,其示出了本申请一个实施例提供的时间校准装置的结构方框图。该时间校准装置通过硬件或者软硬件的结合实现成为图1中心跳服务器102的全部或者一部分。该装置包括:第一接收模块801、第一生成模块802、第一发送模块803;

第一接收模块801,用于接收节点发送的心跳请求消息;

第一生成模块802,用于生成心跳响应消息,心跳响应消息中包含心跳服务器的本地时间,心跳服务器的本地时间与时间服务器的时间同步;

第一发送模块803,用于向节点发送心跳响应消息,以使节点根据心跳服务器的本地时间校准节点的本地时间。

一种可选的实施例中,还包括同步模块804,用于根据以下方式将心跳服务器的本地时间与时间服务器的时间同步:

通过ntp网络时间协议向时间服务器发送ntp报文;

接收时间服务器发送的ntp响应报文,ntp响应报文中包含时间服务器的时间;

根据时间服务器的时间同步心跳服务器的本地时间。

一种可选的实施例中,心跳请求消息中包含校准请求信息;

第一生成模块802,还用于根据校准请求信息,确认心跳服务器的本地时间。

一种可选的实施例中,第一生成模块802,还用于:

确定接收到心跳请求消息的接收时间点;

确定接收时间点位于预设时间段之内。

请参考图9,其示出了本申请一个实施例提供的时间校准装置的结构方框图。该时间校准装置通过硬件或者软硬件的结合实现成为图1中节点103的全部或者一部分。该装置包括:第二发送模块901、第二接收模块902和校准模块903;

第二发送模块901,用于向心跳服务器发送心跳请求消息;

第二接收模块902,用于接收心跳服务器发送的心跳响应消息,心跳响应消息中包含心跳服务器的本地时间,心跳服务器的本地时间与时间服务器的时间同步;

校准模块903,用于根据心跳服务器的本地时间校准节点的本地时间。

一种可选的实施例中,第二发送模块901,还用于在心跳请求消息中添加第一时间戳;

第二接收模块902,还用于确定接收到心跳响应消息的第二时间戳;

校准模块903,具体用于确定节点的当前时钟值;根据第一时间戳和第二时间戳,计算心跳服务器的本地时间对应的系统时钟值;根据当前时钟值和系统时钟值,确定时间增量;根据心跳服务器的本地时间和时间增量,确定节点的本地时间。

一种可选的实施例中,校准模块903,具体用于根据以下公式确定所述节点的本地时间:

curr_unifide_time=sys_unified_time+f[t2-(p1+p2)/2]

其中,curr_unifide_time为所述节点的本地时间;sys_unified_time为所述心跳服务器的本地时间;t2为所述节点的当前时钟值;p1为所述第一时间戳;p2为所述第二时间戳;f()为时钟单位转换的函数。

一种可选的实施例中,还包括第二生成模块904,用于生成心跳请求消息,心跳请求消息中包含校准请求信息。

请参考图10,其示出了本申请一个实施例提供的服务器的结构方框图。该服务器1000实现为图1中的心跳服务器102。具体来讲:

服务器1000包括中央处理单元(cpu)1001、包括随机存取存储器(ram)1002和只读存储器(rom)1003的系统存储器1004,以及连接系统存储器1004和中央处理单元1001的系统总线1005。所述服务器1000还包括帮助计算机内的各个器件之间传输信息的基本输入/输出系统(i/o系统)1006,和用于存储操作系统1013、应用程序1014和其他程序模块1015的大容量存储设备1007。

所述基本输入/输出系统1006包括有用于显示信息的显示器1008和用于用户输入信息的诸如鼠标、键盘之类的输入设备1009。其中所述显示器1008和输入设备1009都通过连接到系统总线1005的输入输出控制器1010连接到中央处理单元1001。所述基本输入/输出系统1006还可以包括输入输出控制器1010以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器1010还提供输出到显示屏、打印机或其他类型的输出设备。

所述大容量存储设备1007通过连接到系统总线1005的大容量存储控制器(未示出)连接到中央处理单元1001。所述大容量存储设备1007及其相关联的计算机可读介质为服务器1000提供非易失性存储。也就是说,所述大容量存储设备1007可以包括诸如硬盘或者cd-rom驱动器之类的计算机可读介质(未示出)。

不失一般性,所述计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括ram、rom、eprom、eeprom、闪存或其他固态存储其技术,cd-rom、dvd或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知所述计算机存储介质不局限于上述几种。上述的系统存储器1004和大容量存储设备1007可以统称为存储器。

根据本申请的各种实施例,所述服务器1000还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即服务器1000可以通过连接在所述系统总线1005上的网络接口单元1011连接到网络1012,或者说,也可以使用网络接口单元1011来连接到其他类型的网络或远程计算机系统(未示出)。

所述存储器还包括一个或者一个以上的程序,所述一个或者一个以上程序存储于存储器中,所述一个或者一个以上程序包含用于进行本申请实施例提供的签到方法的指令。

本领域普通技术人员可以理解上述实施例的签到方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(rom,readonlymemory)、随机存取记忆体(ram,randomaccessmemory)、磁盘或光盘等。

请参考图11,其示出了本申请一个实施例提供的终端的结构示意图。该终端1100为图1中的节点103。具体来讲:

终端1100可以包括rf(radiofrequency,射频)电路1110、包括有一个或一个以上计算机可读存储介质的存储器1120、输入单元1130、显示单元1140、传感器1150、音频电路1160、近场通信模块1170、包括有一个或者一个以上处理核心的处理器1180、以及电源1190等部件。本领域技术人员可以理解,图11中示出的终端结构并不构成对终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:

rf电路1110可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,交由一个或者一个以上处理器1180处理;另外,将涉及上行的数据发送给基站。通常,rf电路1110包括但不限于天线、至少一个放大器、调谐器、一个或多个振荡器、用户身份模块(sim)卡、收发信机、耦合器、lna(lownoiseamplifier,低噪声放大器)、双工器等。此外,rf电路1110还可以通过无线通信与网络和其他设备通信。所述无线通信可以使用任一通信标准或协议,包括但不限于gsm(globalsystemofmobilecommunication,全球移动通讯系统)、gprs(generalpacketradioservice,通用分组无线服务)、cdma(codedivisionmultipleaccess,码分多址)、wcdma(widebandcodedivisionmultipleaccess,宽带码分多址)、lte(longtermevolution,长期演进)、电子邮件、sms(shortmessagingservice,短消息服务)等。

存储器1120可用于存储软件程序以及模块,处理器1180通过运行存储在存储器1120的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器1120可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据终端1100的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器1120可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器1120还可以包括存储器控制器,以提供处理器1180和输入单元1130对存储器1120的访问。

输入单元1130可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。具体地,输入单元1130可包括图像输入设备1131以及其他输入设备1132。图像输入设备1131可以是摄像头,也可以是光电扫描设备。除了图像输入设备1131,输入单元1130还可以包括其他输入设备1132。具体地,其他输入设备1132可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。

显示单元1140可用于显示由用户输入的信息或提供给用户的信息以及终端1100的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。显示单元1140可包括显示面板1141,可选的,可以采用lcd(liquidcrystaldisplay,液晶显示器)、oled(organiclight-emittingdiode,有机发光二极管)等形式来配置显示面板1141。

终端1100还可包括至少一种传感器1150,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板1141的亮度,接近传感器可在终端1100移动到耳边时,关闭显示面板1141和/或背光。作为运动传感器的一种,重力加速度传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于终端1100还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。

音频电路1160、扬声器1161,传声器1162可提供用户与终端1100之间的音频接口。音频电路1160可将接收到的音频数据转换后的电信号,传输到扬声器1161,由扬声器1161转换为声音信号输出;另一方面,传声器1162将收集的声音信号转换为电信号,由音频电路1160接收后转换为音频数据,再将音频数据输出处理器1180处理后,经rf电路1110以发送给比如另一电子设备,或者将音频数据输出至存储器1120以便进一步处理。音频电路1160还可能包括耳塞插孔,以提供外设耳机与终端1100的通信。

终端1100通过近场通信模块1170与外部设备建立近场通信连接,并通过该近场通信连接进行数据交互。本实施例中,该近场通信模块1170具体包括蓝牙模块和/或wifi模块。

处理器1180是终端1100的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器1120内的软件程序和/或模块,以及调用存储在存储器1120内的数据,执行终端1100的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器1180可包括一个或多个处理核心;优选的,处理器1180可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器1180中。

终端1100还包括给各个部件供电的电源1190(比如电池),优选的,电源可以通过电源管理系统与处理器1180逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源1190还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。

尽管未示出,终端1100还可以包括蓝牙模块等,在此不再赘述。

具体在本实施例中,终端1100还包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行以实现上述签到方法。

本领域普通技术人员可以理解上述实施例的签到方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于计算机可读存储介质中,存储介质可以包括:只读存储器(rom,readonlymemory)、随机存取记忆体(ram,randomaccessmemory)、磁盘或光盘等。

上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。

以上所述仅为本申请的较佳实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1