golang程序热更新方法、装置以及计算机设备与流程



[0001]
本发明涉及golang程序热更新技术领域,尤其涉及一种golang程序热更新方法、装置、计算机设备及计算机可读存储介质。


背景技术:

[0002]
由于golang语言是一门静态类型的编程语言,golang语言的数据存储到存储单元之后,存储位置是确定且不可改变的,因此,golang语言编写的程序具有较强的稳定性。然而,对于需要扩展能力的应用程序而言,golang语言的这种存储后不可改变的特性,实现功能扩展的代价会很高。例如,当golang语言的应用程序进行版本升级时,需要将应用程序停止,然后将新代码写入并执行新代码,从而运行新版本应用程序。也就是说,现有的golang语言的应用程序在进行更新时,一般都有停止服务后更新。因此,效率低下,且灵活性差。


技术实现要素:

[0003]
有鉴于此,本发明提出一种golang程序热更新方法、装置、计算机设备及计算机可读存储介质,能够解决golang程序在更新过程中停止服务的问题。
[0004]
首先,为实现上述目的,本发明提供一种golang程序热更新方法,所述方法包括:
[0005]
接收golang程序更新请求,获取所述更新请求中目标功能对应的第一代码段;将所述第一代码段添加到规则引擎的内容存储单元;根据所述规则引擎的执行规则从所述内容存储单元中调用所述第一代码段替代所述目标功能对应的第二代码段;执行包括所述第一代码段的golang程序。
[0006]
在一个例子中,所述将所述第一代码段添加到规则引擎的内容存储单元包括:通过ast技术对所述第一代码段进行解析,得到对应的可执行代码段;将所述可执行代码段添加到所述内容存储单元。
[0007]
在一个例子中,所述获取所述更新请求中目标功能对应的第一代码段包括:将所述golang程序更新请求对应的代码数据与所述golang程序上一版本的代码数据进行文本比对,找出差异代码;根据代码的格式确定出所述差异代码段中包括的所述第一代码段。
[0008]
在一个例子中,所述执行规则包括:获取所述内容存储单元中所述golang程序中对应一个功能的所有版本的代码段;查找所述所有版本的代码段中的每个版本的代码段的编辑时间;选择出与当前时间的差值最小的编辑时间对应的代码段进行调用。
[0009]
在一个例子中,所述规则引擎还包括执行优先级,所述golang程序热更新方法还包括:获取所述内容存储单元中所述golang程序对应的所有代码段的类型标识;根据所述类型标识和所述执行优先级从所述内容存储单元先后调用所述golang程序对应的代码段。
[0010]
在一个例子中,所述类型标识用于标识出所述golang程序中的不同的子功能的代码段;相同子功能的不同版本的代码段的类型标识都相同。
[0011]
在一个例子中,所述规则引擎通过语法树的方式实现。
[0012]
此外,为实现上述目的,本发明还提供一种golang程序热更新装置,所述装置包
括:
[0013]
获取模块,用于接收golang程序更新请求,获取所述更新请求中目标功能对应的第一代码段;添加模块,用于将所述第一代码段添加到规则引擎的内容存储单元;调用模块,用于根据所述规则引擎的执行规则从所述内容存储单元中调用所述第一代码段替代所述目标功能对应的第二代码段;执行模块,用于执行包括所述第一代码段的golang程序。
[0014]
进一步地,本发明还提出一种计算机设备,所述计算机设备包括存储器、处理器,所述存储器上存储有可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上述的golang程序热更新方法的步骤。
[0015]
进一步地,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序可被至少一个处理器执行,以使所述至少一个处理器执行如上述的golang程序热更新方法的步骤。
[0016]
相较于现有技术,本发明所提出的golang程序热更新方法、装置、计算机设备及计算机可读存储介质,能够在接收golang程序更新请求后,获取所述更新请求中目标功能对应的第一代码段;然后将所述第一代码段添加到规则引擎的内容存储单元,根据所述规则引擎的执行规则从所述内容存储单元中调用所述第一代码段替代所述目标功能对应的第二代码段;最后执行包括所述第一代码段的golang程序。通过以上方式,将新代码段添加到规则引擎后,根据规则引擎的执行规则实现由调用旧代码段转换为调用新代码段,从而实现golang程序的在线更新,提升了golang程序更新的灵活性和效率。
附图说明
[0017]
图1是本发明一实施例的应用环境示意图;
[0018]
图2是本发明golang程序热更新方法一具体实施例的流程示意图;
[0019]
图3是图2步骤s202的一具体实施例的流程示意图;
[0020]
图4是基于图2另一具体实施例的流程示意图;
[0021]
图5是本发明一具体实施例中的规则引擎的应用流程图;
[0022]
图6是本发明一具体实施例中的基于语法树的规则引擎架构图;
[0023]
图7是本发明计算机设备一可选的硬件架构的示意图;
[0024]
图8是本发明golang程序热更新装置一实施例的程序模块示意图。
具体实施方式
[0025]
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0026]
需要说明的是,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求
的保护范围之内。
[0027]
图1是本发明一实施例的应用环境示意图。参阅图1所示,所述计算机设备1与开发平台连接,当接收到所述开发平台发送的golang程序热更新请求之后,可以获取所述更新请求中目标功能对应的第一代码段,然后添加到规则引擎的内容存储单元;接着,根据所述规则引擎的执行规则从所述内容存储单元中调用所述第一代码段替代所述目标功能对应的第二代码段,从而执行包括所述第一代码段的golang程序。在本实施例中,所述计算机设备1可作为终端设备如移动终端比如手机、平板、便携设备,或者pc机,服务器等。在其他实施例中,所述计算机设备1也可以作为独立的功能模块,然后附加到手机、平板、便携设备等移动终端,或者pc机,服务器上,以实现golang程序热更新的功能。当然,所述计算机设备1也可以提供交互界面,然后通过交互界面接收用户输入的golang程序更新请求,然后从自身存储单元或者外接设备中获取所述更新请求中目标功能对应的第一代码段。这里不做限制。
[0028]
图2是本发明golang程序热更新方法一实施例的流程示意图。可以理解,本方法实施例中的流程图不用于对执行步骤的顺序进行限定。下面以图1所示的应用环境为例,以计算机设备为执行主体进行示例性描述。
[0029]
如图2所示,所述golang程序热更新方法可以包括步骤s200~s206,其中:
[0030]
步骤s200,接收golang程序更新请求,获取所述更新请求中目标功能对应的第一代码段。
[0031]
步骤s202,将所述第一代码段添加到规则引擎的内容存储单元。
[0032]
具体的,所述计算机设备1与开发平台连接,然后当所述开发平台对golang程序进行代码更新后,则会向所述计算机设备1发送golang程序更新请求,所述golang程序更新请求中包括代码数据,一般来说,代码数据是所述golang程序的代码,因此,也包括了更新的目标功能对应的第一代码。所述计算机设备1接收到所述golang程序更新请求后,获取所述golang程序更新请求中目标功能对应的第一代码段。在本实施例中,所述获取所述更新请求中目标功能对应的第一代码段包括:将所述golang程序更新请求对应的代码数据与所述golang程序上一版本的代码数据进行文本比对,找出差异代码;然后根据代码的格式确定出所述差异代码段中包括的所述第一代码段。具体的,所述计算机设备1可以通过将所述golang程序更新请求对应的代码数据与所述golang程序上一版本的代码数据进行文本比对,然后找出差异代码,并根据代码的格式,比如代码的最小执行单位,代码函数的格式,通过查找出代码函数的函数头和函数尾,从而确定出此次更新的目标功能对应的第一代码段。
[0033]
所述计算机设备1获取到所述第一代码段后,则添加到规则引擎中的内容存储单元中去。在本实施例中,所述规则引擎是一个对于golang程序进行管理和执行的系统,例如,通过语法树构建的应用程序,包括基于golang语言构建的语法树,或者是基于其他语言比如java语言构建的语法树,这里不做限制。通过语法树的方式构建规则引擎,可以更加灵活有效地对新添加的代码程序进行管理。所述计算机设备1构建所述规则引擎后,还会为所述规则引擎提供足够的存储单元,包括内容存储单元和其他存储单元。所述内容存储单元用于存储golang程序相关的执行代码,而其他存储单元则存储所述规则引擎的其他数据,比如所述规则引擎的系统数据,日志数据,以及其他的说明性数据。
[0034]
参阅图3所示,在一示例性实施例中,步骤s202可以包括步骤s300~s302。
[0035]
步骤s300,通过ast技术对所述第一代码段进行解析,得到对应的可执行代码段。
[0036]
步骤s302,将所述可执行代码段添加到所述内容存储单元。
[0037]
具体地,由于获取到的代码段一般会包括至少多个代码函数,因此,对于包括多个代码函数的第一代码段,需要解析出其中的可执行代码段。在本实施例中,所述计算机设备1预先根据所述golang程序的细分功能设置ast(abstract syntax tree,抽象语法树)解析规则,然后通过ast技术对所述第一代码段进行解析,从而解析出所述第一代码段对应的可执行代码段。其中,ast对代码段进行解析的技术较为常用,这里不做赘述。所述计算机设备1通过ast技术对所述第一代码段进行解析,得到对应的可执行代码段,然后将所述可执行代码添加到所述内容存储单元。通过将可执行代码存储到所述内容存储单元,可以省去了代码的再编译,因此,也提高了golang程序更新的效率。
[0038]
步骤s204,根据所述规则引擎的执行规则从所述内容存储单元中调用所述第一代码段替代所述目标功能对应的第二代码段。
[0039]
步骤s206,执行包括所述第一代码段的golang程序。
[0040]
具体地,所述计算机设备1构建所述规则引擎之后,还设置有一个执行规则,所述执行规则用于描述和控制所述规则引擎根据什么样的方式去执行所述内容存储单元中的golang程序对应的代码段。因此,当所述计算机设备1将所述第一代码段添加到所述规则引擎中的内容存储单元之后,所述计算机设备1还会进一步根据所述执行规则从所述内容存储单元中调用所述第一代码段替代所述目标功能对应的第二代码段。
[0041]
在本实施例中,所述执行规则包括:获取所述内容存储单元中所述golang程序中对应一个功能的所有版本的代码段,然后查找所述所有版本的代码段中的每个版本的代码段的编辑时间,选择出与当前时间的差值最小的编辑时间对应的代码段进行调用。例如,当所述golang程序中的a功能目前进行更新,总共更新了3次,那么所述内容存储单元中包括了对应a功能的3个版本的可执行代码段。那么,所述计算机设备1根据所述执行规则查找a功能对应的这3个版本的可执行代码的编辑时间,例如t1,t2和t3;然后分别计算t1,t2和t3与当前时间的差值,得到c1,c2和c3,其中,c1>c2>c3。那么,所述计算机设备1则会根据所述执行规则,选择t3对应的可执行代码进行调用。通过时间先后的顺序,可以很好地将最新更新的代码段选择出来执行。
[0042]
参阅图4所示,在一示例性实施例中,所述规则引擎还包括执行优先级,所述golang程序热更新方法除了包括步骤s200~s206之外,还可以包括步骤s400~s402。
[0043]
步骤s400,获取所述内容存储单元中所述golang程序对应的所有代码段的类型标识。
[0044]
步骤s402,根据所述类型标识和所述执行优先级从所述内容存储单元先后调用所述golang程序对应的代码段。
[0045]
具体地,所述计算机设备1预先对所述golang程序中的每个子功能的代码段设置一个类型标识,所述类型标识用于标识出所述golang程序中的不同的子功能的代码段;相同子功能的不同版本的代码段的类型标识都相同。因此,当所述golang程序更新的目标功能有多个时,那么,所述计算机设备1可以根据执行规则选择出每个目标功能对应的类型标识的代码段,然后根据预先设置的执行优先级,以及每个目标功能对应的类型标识先后执
行选择出来的多个代码段替换原有的对应类型标识的多个代码段。因此,可以实现有条不紊地实现多个子功能的代码段的更新。
[0046]
请参阅图5和图6,是本发明一具体实施例中的应用效果图。其中,图5是规则引擎的应用流程图,图6是基于语法树的规则引擎架构图。
[0047]
在本实施例中,所述计算机设备1将golang程序更新请求对应的可执行代码更新请求输入到规则引擎之后,所述规则引擎可以则加载对应的执行规则,然后输出执行结果。具体地,当所述规则引擎为基于语法树架构时,所述规则引擎具体可以包括:规则说明部分和规则执行部分。其中,规则说明部分包括规则名、执行规则和执行优先级,规则名描述规则引擎中包括的规则的名称,执行规则描述的规则引擎执行的流程和方法,执行优先级描述代码内容部分的不同代码内容的执行先后顺序。规则执行部分包括开始、代码内容和结束,代码内容部分存储golang程序的子功能的可执行代码。因此,所述规则引擎在接收到可执行代码之后,则添加到代码内容部分,然后当“开始”后,所述规则引擎根据“执行规则”和“执行优先级”从“代码内容”中选择对应的可执行代码并执行,直到“结束”。在本实施例中,基于语法树的所述规则引擎可以支持更多的编码逻辑,比如if、else及嵌套的函数逻辑,以及规则内定义变量,规则内改变函数名以及复杂的四则运算等。
[0048]
从上文可知,本实施例所提出的golang程序热更新方法能够在接收golang程序更新请求后,获取所述更新请求中目标功能对应的第一代码段;然后将所述第一代码段添加到规则引擎的内容存储单元,根据所述规则引擎的执行规则从所述内容存储单元中调用所述第一代码段替代所述目标功能对应的第二代码段;最后执行包括所述第一代码段的golang程序。通过以上方式,将新代码段添加到规则引擎后,根据规则引擎的执行规则实现由调用旧代码段转换为调用新代码段,从而实现golang程序的在线更新,提升了golang程序更新的灵活性和效率。
[0049]
此外,本发明还提供一种计算机设备,参阅图7所示,是本发明计算机设备一可选的硬件架构的示意图。
[0050]
本实施例中,所述计算机设备1可包括,但不仅限于,可通过系统总线相互通信连接存储器11、处理器12、网络接口13。所述计算机设备1通过网络接口13连接网络(图7未标出),通过网络连接到其他计算机设备(图7未标出)进行数据交互。所述网络可以是企业内部网(intranet)、互联网(internet)、全球移动通讯系统(global system of mobile communication,gsm)、宽带码分多址(wideband code division multiple access,wcdma)、4g网络、5g网络、蓝牙(bluetooth)、wi-fi、通话网络等无线或有线网络。
[0051]
需要指出的是,图7仅示出了具有组件11-13的计算机设备1,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
[0052]
其中,所述存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、随机访问存储器(ram)、静态随机访问存储器(sram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、可编程只读存储器(prom)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器11可以是所述计算机设备1的内部存储单元,例如该计算机设备1的硬盘或内存。在另一些实施例中,所述存储器11也可以是所述计算机设备1的外部存储设备,例如该计算机设备1配备的插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡
(flash card)等。当然,所述存储器11还可以既包括所述计算机设备1的内部存储单元也包括其外部存储设备。本实施例中,所述存储器11通常用于存储安装于所述计算机设备1的操作系统和各类应用软件,golang程序热更新装置200的程序代码等。此外,所述存储器11还可以用于暂时地存储已经输出或者将要输出的各类数据。
[0053]
所述处理器12在一些实施例中可以是中央处理器(central processing unit,cpu)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器12通常用于控制所述计算机设备1的总体操作,例如执行数据交互或者通信相关的控制和处理等。本实施例中,所述处理器12用于运行所述存储器11中存储的程序代码或者处理数据,例如运行所述golang程序热更新装置200的应用程序,这里不做限制。
[0054]
所述网络接口13可包括无线网络接口或有线网络接口,该网络接口13通常用于在所述计算机设备1与其他计算机设备建立通信连接。
[0055]
本实施例中,所述计算机设备1内安装并运行有golang程序热更新装置200时,当所述golang程序热更新装置200运行时,能够在接收golang程序更新请求后,获取所述更新请求中目标功能对应的第一代码段;然后将所述第一代码段添加到规则引擎的内容存储单元,根据所述规则引擎的执行规则从所述内容存储单元中调用所述第一代码段替代所述目标功能对应的第二代码段;最后执行包括所述第一代码段的golang程序。通过以上方式,将新代码段添加到规则引擎后,根据规则引擎的执行规则实现由调用旧代码段转换为调用新代码段,从而实现golang程序的在线更新,提升了golang程序更新的灵活性和效率。
[0056]
至此,己经详细介绍了本发明计算机设备的硬件结构和功能。下面,将基于上述计算机设备,提出本发明的各个实施例。
[0057]
参阅图8所示,是本发明golang程序热更新装置200一实施例的程序模块图。
[0058]
本实施例中,所述golang程序热更新装置200包括一系列的存储于存储器11上的计算机程序指令,当该计算机程序指令被处理器12执行时,可以实现本发明实施例的golang程序热更新功能。在一些实施例中,基于该计算机程序指令各部分所实现的特定的操作,golang程序热更新装置200可以被划分为一个或多个模块。例如,在图8中,所述golang程序热更新装置200可以被分割成获取模块201、添加模块202、调用模块203和执行模块204。其中:
[0059]
所述获取模块201,用于接收golang程序更新请求,获取所述更新请求中目标功能对应的第一代码段。
[0060]
所述添加模块202,用于将所述第一代码段添加到规则引擎的内容存储单元。
[0061]
具体的,所述计算机设备与开发平台连接,然后当所述开发平台对golang程序进行代码更新后,则会向所述计算机设备发送golang程序更新请求,所述golang程序更新请求中包括代码数据,一般来说,代码数据是所述golang程序的代码,因此,也包括了更新的目标功能对应的第一代码。所述获取模块201接收到所述golang程序更新请求后,获取所述golang程序更新请求中目标功能对应的第一代码段。在本实施例中,所述获取所述更新请求中目标功能对应的第一代码段包括:将所述golang程序更新请求对应的代码数据与所述golang程序上一版本的代码数据进行文本比对,找出差异代码;然后根据代码的格式确定出所述差异代码段中包括的所述第一代码段。具体的,所述获取模块201可以通过将所述golang程序更新请求对应的代码数据与所述golang程序上一版本的代码数据进行文本比
对,然后找出差异代码,并根据代码的格式,比如代码的最小执行单位,代码函数的格式,通过查找出代码函数的函数头和函数尾,从而确定出此次更新的目标功能对应的第一代码段。
[0062]
所述获取模块201获取到所述第一代码段后,所述添加模块202则添加到规则引擎中的内容存储单元中去。在本实施例中,所述规则引擎是一个对于golang程序进行管理和执行的系统,例如,通过语法树构建的应用程序,包括基于golang语言构建的语法树,或者是基于其他语言比如java语言构建的语法树,这里不做限制。通过语法树的方式构建规则引擎,可以更加灵活有效地对新添加的代码程序进行管理。所述计算机设备构建所述规则引擎后,还会为所述规则引擎提供足够的存储单元,包括内容存储单元和其他存储单元。所述内容存储单元用于存储golang程序相关的执行代码,而其他存储单元则存储所述规则引擎的其他数据,比如所述规则引擎的系统数据,日志数据,以及其他的说明性数据。
[0063]
在一示例性实施例中,所述添加模块202通过ast技术对所述第一代码段进行解析,得到对应的可执行代码段,然后将所述可执行代码段添加到所述内容存储单元。具体地,由于获取到的代码段一般会包括至少多个代码函数,因此,对于包括多个代码函数的第一代码段,需要解析出其中的可执行代码段。在本实施例中,所述添加模块202预先根据所述golang程序的细分功能设置ast(abstract syntax tree,抽象语法树)解析规则,然后通过ast技术对所述第一代码段进行解析,从而解析出所述第一代码段对应的可执行代码段。其中,ast对代码段进行解析的技术较为常用,这里不做赘述。所述添加模块202通过ast技术对所述第一代码段进行解析,得到对应的可执行代码段,然后将所述可执行代码添加到所述内容存储单元。通过将可执行代码存储到所述内容存储单元,可以省去了代码的再编译,因此,也提高了golang程序更新的效率。
[0064]
所述调用模块203,用于根据所述规则引擎的执行规则从所述内容存储单元中调用所述第一代码段替代所述目标功能对应的第二代码段。
[0065]
所述执行模块204,用于执行包括所述第一代码段的golang程序。
[0066]
具体地,所述计算机设备构建所述规则引擎之后,还设置有一个执行规则,所述执行规则用于描述和控制所述规则引擎根据什么样的方式去执行所述内容存储单元中的golang程序对应的代码段。因此,当所述添加模块202将所述第一代码段添加到所述规则引擎中的内容存储单元之后,所述调用模块203还会进一步根据所述执行规则从所述内容存储单元中调用所述第一代码段替代所述目标功能对应的第二代码段。
[0067]
在本实施例中,所述执行规则包括:获取所述内容存储单元中所述golang程序中对应一个功能的所有版本的代码段,然后查找所述所有版本的代码段中的每个版本的代码段的编辑时间,选择出与当前时间的差值最小的编辑时间对应的代码段进行调用。例如,当所述golang程序中的a功能目前进行更新,总共更新了3次,那么所述内容存储单元中包括了对应a功能的3个版本的可执行代码段。那么,所述调用模块203根据所述执行规则查找a功能对应的这3个版本的可执行代码的编辑时间,例如t1,t2和t3;然后分别计算t1,t2和t3与当前时间的差值,得到c1,c2和c3,其中,c1>c2>c3。那么,所述调用模块203则会根据所述执行规则,选择t3对应的可执行代码进行调用。通过时间先后的顺序,所述执行模块204可以很好地将最新更新的代码段选择出来执行。
[0068]
在一示例性实施例中,所述规则引擎还包括执行优先级,所述调用模块203还用于
获取所述内容存储单元中所述golang程序对应的所有代码段的类型标识,然后根据所述类型标识和所述执行优先级从所述内容存储单元先后调用所述golang程序对应的代码段。
[0069]
具体地,所述计算机设备预先对所述golang程序中的每个子功能的代码段设置一个类型标识,所述类型标识用于标识出所述golang程序中的不同的子功能的代码段;相同子功能的不同版本的代码段的类型标识都相同。因此,当所述golang程序更新的目标功能有多个时,那么,所述调用模块203可以根据执行规则选择出每个目标功能对应的类型标识的代码段,然后根据预先设置的执行优先级,以及每个目标功能对应的类型标识先后执行选择出来的多个代码段替换原有的对应类型标识的多个代码段,最后所述执行模块204依次执行所述多个代码段。因此,所述golang程序更新装置可以实现有条不紊地实现多个子功能的代码段的更新。
[0070]
从上文可知,所述计算机设备能够在接收golang程序更新请求后,获取所述更新请求中目标功能对应的第一代码段;然后将所述第一代码段添加到规则引擎的内容存储单元,根据所述规则引擎的执行规则从所述内容存储单元中调用所述第一代码段替代所述目标功能对应的第二代码段;最后执行包括所述第一代码段的golang程序。通过以上方式,将新代码段添加到规则引擎后,根据规则引擎的执行规则实现由调用旧代码段转换为调用新代码段,从而实现golang程序的在线更新,提升了golang程序更新的灵活性和效率。
[0071]
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0072]
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
[0073]
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。