同步本地与服务器时间的方法、介质、电子设备及系统

文档序号:1630883 发布日期:2020-01-14 浏览:21次 >En<

阅读说明:本技术 同步本地与服务器时间的方法、介质、电子设备及系统 (Method, medium, electronic device and system for synchronizing local time and server time ) 是由 张磊 陈少杰 张文明 于 2018-07-05 设计创作,主要内容包括:本发明公开了一种同步本地与服务器时间的方法、介质、电子设备及系统,涉及互联网应用开发领域,包括步骤:获取本地时间和服务器时间,并计算本地时间和服务器时间的时间差值;定义一具有public权限的时间获取函数,创建用于调用时间获取函数的NetTimeUtils类;当发起直播网络请求时,使用NetTimeUtils类调用所述时间获取函数,获取当前的本地时间,根据获取到的当前的本地时间和所述时间差值推算得到当前的服务器时间供服务器鉴权。本发明提供的同步本地与服务器时间的方法,即使用户修改了系统的本地时间,也可使得直播网络请求鉴权成功,可靠性较好。(The invention discloses a method, a medium, electronic equipment and a system for synchronizing local time and server time, which relate to the field of Internet application development and comprise the following steps: acquiring local time and server time, and calculating a time difference value between the local time and the server time; defining a time acquisition function with public authority, and creating a NetTimeUtils class for calling the time acquisition function; when a live broadcast network request is initiated, the NetTimeUtils class is used for calling the time acquisition function to acquire the current local time, and the current server time is calculated according to the acquired current local time and the time difference value to be used for server authentication. The method for synchronizing the local time and the server time provided by the invention can ensure that the request authentication of the live broadcast network is successful even if the user modifies the local time of the system, and has better reliability.)

同步本地与服务器时间的方法、介质、电子设备及系统

技术领域

本发明涉及互联网应用开发领域,具体涉及一种同步本地与服务器时间的方法、介质、电子设备及系统。

背景技术

在直播领域中,直播服务器会收到大量的直播网络请求,收到直播网络请求后,服务器需要直播网络请求中的时间信息来进行鉴权操作。

传统方案的时间获取方式就是直接获取客户端Android系统的本地时间,通常情况下这种方式是有效的,但是当用户修改了系统的本地时间后就会导致鉴权失败,从而导致直播网络请求失败的问题。

发明内容

针对现有技术中存在的缺陷,本发明的目的在于提供一种同步本地与服务器时间的方法,即使用户修改了系统的本地时间,也可使得直播网络请求鉴权成功,可靠性较好。

为达到以上目的,本发明采取的技术方案是:

一种同步本地与服务器时间的方法,包括步骤:

获取本地时间和服务器时间,并计算本地时间和服务器时间的时间差值;

定义一具有public权限的时间获取函数,创建用于调用时间获取函数的NetTimeUtils类;

当发起直播网络请求时,使用NetTimeUtils类调用所述时间获取函数,获取当前的本地时间,根据获取到的当前的本地时间和所述时间差值推算得到当前的服务器时间供服务器鉴权。

在上述技术方案的基础上,在计算本地时间和服务器时间的时间差值之后,还包括步骤:实时更新所述时间差值,具体过程如下:

通过IntentFilter类构造一个filter对象,调用filter.addAction函数对时区的改变和系统时间的改变信息进行过滤监听;

定义一个广播接收类MyReceiver,该MyReceiver类继承BroadcastReceive类,并复写BroadcastReceive类的onReceive函数;

通过MyReceiver的构造函数来实例化一个mMyReceiver对象;

调用getApplicationContext函数获取系统的上下文对象mContext,并调用广播注册函数mContext.registerReceiver(mMyReceiver,filter)关联所述mMyReceiver对象和filter对象;

在MyReceiver类的onReceive函数中对时区的改变和系统时间的改变信息进行解析,得到时间变化信息;

对时间差值进行重新赋值和更新,使更新后的时间差值为更新前的时间差值与所述时间变化信息之和。

在上述技术方案的基础上,获取本地时间和服务时间的具体步骤包括:

调用OKhttpUtils工具类的Post方法,获取服务器时间;

调用System.currentTimeMillis()函数,获取本地时间。

在上述技术方案的基础上,获取当前的本地时间,根据获取到的当前的本地时间和所述时间差值推算得到当前的服务器时间供服务器鉴权的具体步骤包括:

调用System.currentTimeMillis()函数,获取当前的本地时间;

计算当前的本地时间与所述时间差值之和,作为推算得到的当前的服务器时间。

在上述技术方案的基础上,在计算当前的本地时间与所述时间差值之和时,包括步骤:先将当前的本地时间与所述时间差值的单位转换一致后再进行相加求和。

在上述技术方案的基础上,在计算当前的本地时间与所述时间差值之和,作为推算得到的当前的服务器时间之后,还包括步骤:对推算得到的当前的服务器时间进行四舍五入处理。

本发明还提供了一种存储介质,该存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述同步本地与服务器时间的方法。

本发明还提供了一种电子设备,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述同步本地与服务器时间的方法。

本发明还提供了一种同步本地与服务器时间的系统,包括:

时间获取模块,其用于获取本地时间和服务时间;

计算模块,其用于计算本地时间和服务器时间的时间差值;

创建模块,其用于定义一具有public权限的时间获取函数,创建NetTimeUtils类;

同步处理模块,其用于当发起直播网络请求时,使用NetTimeUtils类调用所述时间获取函数,获取当前的本地时间,根据获取到的当前的本地时间和所述时间差值推算得到当前的服务器时间供服务器鉴权。

在上述技术方案的基础上,还包括更新模块,其用于实时更新所述时间差值,所述更新模块包括:

过滤监听单元,其用于通过IntentFilter类构造一个filter对象,调用filter.addAction函数对时区的改变和系统时间的改变信息进行过滤监听;

定义单元,其用于定义一个广播接收类MyReceiver,该MyReceiver类继承BroadcastReceive类,并复写BroadcastReceive类的onReceive函数,并通过MyReceiver的构造函数来实例化一个mMyReceiver对象;

关联单元,其用于调用getApplicationContext函数获取系统的上下文对象mContext,并调用广播注册函数mContext.registerReceiver(mMyReceiver,filter)关联所述mMyReceiver对象和filter对象;

解析单元,其用于在MyReceiver类的onReceive函数中对时区的改变和系统时间的改变信息进行解析,得到时间变化信息;

更新单元,其用于对时间差值进行重新赋值和更新,使更新后的时间差值为更新前的时间差值与所述时间变化信息之和。

在上述技术方案的基础上,所述时间获取模块包括:

第一时间获取单元,其用于调用OKhttpUtils工具类的Post方法,获取服务器时间;

第二时间获取单元,其用于调用System.currentTimeMillis()函数,获取本地时间。

在上述技术方案的基础上,所述同步处理模块包括:

第三时间获取单元,其用于当有直播网络请求时,调用System.currentTimeMillis()函数,获取当前的本地时间;

第一计算单元,其用于计算当前的本地时间与所述时间差值之和,作为当前的服务器时间。

与现有技术相比,本发明的优点在于:

(1)本发明的同步本地与服务器时间的方法,通过预先计算得到本地时间和服务器时间的时间差值,当有直播网络请求时,先获取当前的本地时间,再根据获取到的当前的本地时间和所述时间差值推算得到当前的服务器时间,以供服务器鉴权,从而使得在获取到时间差值之前,即使用户修改了系统的本地时间,直播网络请求者在向服务器发送直播网络请求时携带的时间信息即为推算得到的服务器时间,该推算得到的服务器时间也可以与实际的服务器时间一致,鉴权成功。

(2)本发明的同步本地与服务器时间的方法还包括步骤实时更新所述时间差值,只要当系统时间有变化,就能够主动触发时间差值的更新逻辑,进而可以通过调用时间获取函数获取到与服务器时间同步的时间信息,用该与服务器时间同步的时间信息进行鉴权操作,无论用户在任何时间修改了系统的本地时间,由于实时更新了时间差值,也可保证本地和服务器时间同步,直播网络请求鉴权成功,更加安全可靠。

附图说明

图1为本发明实施例一同步本地与服务器时间的方法流程图;

图2为本发明实施例三电子设备的示意图。

具体实施方式

以下结合附图及实施例对本发明作进一步详细说明。

实施例一

参见图1所示,本发明实施例提供一种同步本地与服务器时间的方法,包括步骤:

S1:获取本地时间和服务器时间,并计算本地时间和服务器时间的时间差值;

S2:定义一具有public权限的时间获取函数,创建用于调用时间获取函数的NetTimeUtils类;

S3:当发起直播网络请求时,使用NetTimeUtils类调用所述时间获取函数,获取当前的本地时间,根据获取到的当前的本地时间和所述时间差值推算得到当前的服务器时间供服务器鉴权。此步骤S3即为所述时间获取函数的具体实现过程。

在本发明实施例中,当斗鱼客户端与服务器连接时,进行步骤S1的操作,获取一次本地时间和服务器时间,得到两者的时间差值,当需要进行斗鱼直播时,即发起直播网络请求时,进行步骤S3的操作,使用NetTimeUtils类调用所述时间获取函数,获取当前的本地时间,根据获取到的当前的本地时间和所述时间差值推算得到当前的服务器时间,然后将推算得到的当前的服务器时间返回给调用者,此处的调用者可以理解为发起直播网络请求的斗鱼客户端,此时,该斗鱼客户端的直播网络请求中携带的时间信息即为推算得到的当前的服务器时间,该推算得到的服务器时间和实际的服务器时间一致,从而完成同步本地和服务器时间。

服务器根据斗鱼客户端的直播网络请求中携带的时间信息和服务器时间进行对比,来对该直播网络请求进行鉴权操作,若直播网络请求中携带的时间信息和服务器时间一致,则鉴权成功,服务器才会允许斗鱼客户端的该直播网络请求,若直播网络请求中携带的时间信息和服务器时间不一致,则鉴权失败,服务器会禁止斗鱼客户端的该直播网络请求。

通常,若本地时间和服务器时间完全一致,则两者的时间差值应该为零,然而,当用户在客户端与服务器连接之前修改了系统的本地时间,使得该时间差值不为零,采用上述技术方案,完成同步本地和服务器时间之后,即使该时间差值不为零,也可以使得服务器对该直播网络请求鉴权成功。

在本发明实施例中,步骤S1中获取本地时间和服务时间的具体步骤包括:

S101:调用OKhttpUtils工具类的Post方法,获取服务器时间;

具体过程为:调用OKhttpUtils工具类的Post函数,向服务器发送一个Post请求,获取服务器时间,并将获取到的服务器时间记为serverTime;

Post函数示意如下:

OKhttpUtils.url(“http://douyu.xxx.com”).post().exec();

S102:调用Android系统的System.currentTimeMillis()函数,获取本地时间;

该System.currentTimeMillis()函数获取的本地时间单位是毫秒,因此需要将获取到的本地时间进行单位换算,将其单位转换成秒后,再进行输出,即System.currentTimeMillis()/1000后进行输出,并将单位转换后的本地时间标记为localTime。

相应地,计算本地时间和服务器时间的时间差值中,将时间差值标记为diffTime,则diffTime=serverTime–localTime,此时时间差值diffTime的单位为秒。

在本发明实施例中,步骤S2中,定义的时间获取函数为getTimeStamp(),示意为:

public static long getTimeStamp(){}

该时间获取函数的名称为getTimeStamp,该时间获取函数设置为static静态类型,该时间获取函数的返回值为long类型,该时间获取函数的返回值的单位为秒。

在本发明实施例中,时间获取函数getTimeStamp具有public权限的,使得其他类具有对该时间获取函数进行调用的权限,即创建的NetTimeUtils类具有调用时间获取函数getTimeStamp的权限;并且,时间获取函数getTimeStamp为static静态类型,便于当需要调用该时间获取函数getTimeStamp时可以直接通过类进行直接调用,从而简化调用流程。

进一步地,在本发明实施例中,在计算本地时间和服务器时间的时间差值之后,还包括步骤S4:实时更新所述时间差值。

上述步骤S4中实时更新所述时间差值的具体过程如下:

S401:通过IntentFilter类构造一个filter对象,调用filter.addAction函数对时区的改变和系统时间的改变信息进行过滤监听;

上述IntentFilter类为Android系统提供的一个过滤器,用来过滤系统级别的广播消息的类。通过IntentFilter类构造一个filter对象,具体方法为:调用IntentFilter中的构造方法来实例化filter对象IntentFilter filter=new IntentFilter()。具体的,通过调用filter.addAction("android.intent.action.TIMEZONE_CHANGED"),来对时区的改变信息进行过滤监听,并通过调用filter.addAction("android.intent.action.DATE_CHANGE"),来对系统时间的改变信息进行过滤监听;

S402:定义一个广播接收类MyReceiver,该MyReceiver类继承BroadcastReceive类,并复写BroadcastReceive类的onReceive函数,使得MyReceiver类具备接收系统广播消息的能力;

S403:通过MyReceiver的构造函数来实例化一个mMyReceiver对象,具体是通过调用MyReceiver mMyReceiver=new MyReceiver()方法来实例化一个mMyReceiver对象;

S404:调用getApplicationContext函数获取系统的上下文对象mContext,并调用广播注册函数mContext.registerReceiver(mMyReceiver,filter)关联所述mMyReceiver对象和filter对象,即告诉系统mMyReceiver对象仅仅能够接受filter对象过滤出来的广播消息信息;

S405:在MyReceiver类的onReceive函数中对时区的改变和系统时间的改变信息进行解析,解析的具体过程为:调用intent对象中的getBundler().getTime()方法获取到时间变化信息,并将时间变化信息标记为receiveDIffTime;

S406:对时间差值进行重新赋值和更新,使更新后的时间差值为更新前的时间差值与所述时间变化信息之和,即将diffTime=diffTime+receiveDIffTime,对时间差值diffTime进行重新赋值和更新。

通过上述步骤S4的操作,只要当系统时间有变化,就能够主动触发时间差值的更新逻辑,进而可以通过调用时间获取函数getTimeStamp获取到与服务器时间同步的时间信息,将该与服务器时间同步的时间信息返回给调用者,用其进行鉴权操作,即使是在客户端和服务器进行连接之后,用户修改系统的本地时间,由于实时更新了时间差值,也可保证本地和服务器时间同步,直播网络请求鉴权成功,更加安全可靠。

在本发明实施例中,步骤S3中,使用NetTimeUtils类调用所述时间获取函数的具体过程为:通过NetTimeUtils.getTimeStamp()方式调用该时间获取函数,其中NetTimeUtils是时间获取函数的类名。

并且,步骤S3中,获取当前的本地时间,根据获取到的当前的本地时间和所述时间差值推算得到当前的服务器时间的具体步骤包括:

S301:当发起直播网络请求时,调用Android系统提供的System.currentTimeMillis()函数,获取当前的本地时间,将当前的本地时间记为currentTime;

S302:计算当前的本地时间与所述时间差值之和,作为当前的服务器时间,并将当前的服务器时间记为resultTime;

具体地,由于currentTime的单位为毫秒,所述时间差值diffTime的单位为秒,因此,在计算当前的本地时间与所述时间差值之和时,包括步骤:先将当前的本地时间与所述时间差值的单位转换一致后再进行相加求和,即推算得到的当前的服务器时间resultTime=currentTime+diffTime*1000,当前的服务器时间的单位为毫秒。

进一步地,在上述得到当前的服务器时间resultTime之后,为了与常用的服务器时间的单位匹配,需要将resultTime的单位转换成秒,并将resultTime转换后的结果记为secondTmp,即secondTmp=resultTime/1000,此时,secondTmp可能是一个小数,因此,在计算当前的本地时间与所述时间差值之和,作为推算得到的当前的服务器时间之后,还包括步骤:对推算得到的当前的服务器时间进行四舍五入处理,此处即为对secondTmp进行四舍五入处理。

在实际应用中,对secondTmp进行四舍五入处理的具体过程为:调用Android系统提供的Math函数对secondTmp进行四舍五入处理,代码示意为:Math.ceil(secondTmp),并将四舍五入处理后的结果记为targetResult,然后通过return targetResult将targetResult返回给调用者,以供服务器鉴权。

优选地,在上述步骤S302中使用到的时间差值为步骤S4实时更新后的时间差值,从而使得只要有系统时间变化均可获取到与服务器时间信息同步的时间信息,使得直播网络请求鉴权成功。在实际应用中,即使是在客户端和服务器进行连接之后,用户修改系统的本地时间,由于实时更新了时间差值,也可保证本地和服务器时间同步,直播网络请求鉴权成功,更加安全可靠。

基于同一发明构思,本申请提供了实施例一对应的存储介质的实施例,详见实施例二

实施例二

对应上述同步本地与服务器时间的方法,本发明实施例还提供了一种存储介质的实施例,该存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述实施例所述的同步本地与服务器时间的方法的步骤,具体实现以下步骤:

获取本地时间和服务器时间,并计算本地时间和服务器时间的时间差值;

定义一具有public权限的时间获取函数,创建用于调用时间获取函数的NetTimeUtils类;

当发起直播网络请求时,使用NetTimeUtils类调用所述时间获取函数,获取当前的本地时间,根据获取到的当前的本地时间和所述时间差值推算得到当前的服务器时间供服务器鉴权。

需要说明的是,本发明实施例中使用的方法和实施例一中一种同步本地与服务器时间的方法是基于同一构思的,故而基于本申请实施例一种介绍的方法,本领域的技术人员能够了解本实施例的存储介质的具体实施方式以及其各种变化形式,所以在此对于该存储介质如何实现本申请实施例中的方法以及各种优选方案不再详细介绍。

基于同一发明构思,本申请提供了实施例一对应的电子设备的实施例,详见实施例三

实施例三

参见图2所示,对应上述同步本地与服务器时间的方法,本发明实施例还提供了一种电子设备的实施例,该电子设备存储有计算机程序,计算机程序被处理器执行时实现上述各实施例所述的同步本地与服务器时间的方法的步骤。

该电子设备包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

获取本地时间和服务器时间,并计算本地时间和服务器时间的时间差值;

定义一具有public权限的时间获取函数,创建用于调用时间获取函数的NetTimeUtils类;

当发起直播网络请求时,使用NetTimeUtils类调用所述时间获取函数,获取当前的本地时间,根据获取到的当前的本地时间和所述时间差值推算得到当前的服务器时间供服务器鉴权。

需要说明的是,本发明实施例中使用的方法和实施例一中一种同步本地与服务器时间的方法是基于同一构思的,故而基于本申请实施例一种介绍的方法,本领域的技术人员能够了解本实施例的电子设备的具体实施方式以及其各种变化形式,所以在此对于该电子设备如何实现本申请实施例中的方法以及各种优选方案不再详细介绍。

基于同一发明构思,本申请提供了实施例一对应的一种同步本地与服务器时间的系统,详见实施例四。

实施例四

本发明实施例还提供了一种同步本地与服务器时间的系统,包括:

时间获取模块,其用于获取本地时间和服务时间;

计算模块,其用于计算本地时间和服务器时间的时间差值;

创建模块,其用于定义一具有public权限的时间获取函数,创建用于调用时间获取函数的NetTimeUtils类;

同步处理模块,其用于当发起直播网络请求时,使用NetTimeUtils类调用所述时间获取函数,获取当前的本地时间,根据获取到的当前的本地时间和所述时间差值推算得到当前的服务器时间供服务器鉴权。

进一步地,本发明实施例中的同步本地与服务器时间的系统还包括更新模块,其用于实时更新所述时间差值,所述更新模块包括:

过滤监听单元,其用于通过IntentFilter类构造一个filter对象,调用filter.addAction函数对时区的改变和系统时间的改变信息进行过滤监听;

定义单元,其用于定义一个广播接收类MyReceiver,该MyReceiver类继承BroadcastReceive类,并复写BroadcastReceive类的onReceive函数,并通过MyReceiver的构造函数来实例化一个mMyReceiver对象;

关联单元,其用于调用getApplicationContext函数获取系统的上下文对象mContext,并调用广播注册函数mContext.registerReceiver(mMyReceiver,filter)关联所述mMyReceiver对象和filter对象;

解析单元,其用于在MyReceiver类的onReceive函数中对时区的改变和系统时间的改变信息进行解析,得到时间变化信息;

更新单元,其用于对时间差值进行重新赋值和更新,使更新后的时间差值为更新前的时间差值与所述时间变化信息之和。

具体地,所述时间获取模块包括:

第一时间获取单元,其用于调用OKhttpUtils工具类的Post方法,获取服务器时间;

第二时间获取单元,其用于调用System.currentTimeMillis()函数,获取本地时间。

具体地,所述同步处理模块包括:

第三时间获取单元,其用于当发起直播网络请求时,调用System.currentTimeMillis()函数,获取当前的本地时间;

第一计算单元,其用于计算当前的本地时间与所述时间差值之和,作为推算得到的当前的服务器时间。

本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

12页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种基于用户浏览习惯的电视节目推送系统及方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类