一种网络数据包处理方法及装置与流程

文档序号:12134394阅读:245来源:国知局
一种网络数据包处理方法及装置与流程

本发明涉及数据通信领域,具体而言,涉及一种网络数据包处理方法及装置。



背景技术:

现有技术中,当终端设备从网卡缓存中获取到网络数据包时,一般采用网络协议栈进行处理,将网络数据包传输至硬件链路层、网络层、传输层、BSD(BerkeleySoftware Distribution,伯克利软件发布)Socket层、及应用层,每一层分别进行网络数据包的解析处理。这种方式下,对终端设备的性能要求较高,例如,网卡处理能力及CPU处理能力等,若想提高终端设备对网络数据包的处理能力,只能选择性能更强的主芯片,可是这种方式将会增加终端设备的成本。



技术实现要素:

有鉴于此,本发明实施例的目的在于提供一种网络数据包处理方法及装置。

第一方面,本发明实施例提供一种网络数据包处理方法,所述方法包括:判断网卡缓存中的网络数据包是否为视频数据包;若所述网络数据包不为视频数据包时,将所述网络数据包存储至第一数据队列,由网络协议栈对所述第一数据队列中的所述网络数据包进行处理;若所述网络数据包为视频数据包时,将所述视频数据包存储至第二数据队列,当到达预设条件时,视频数据处理线程对所述第二数据队列中的所述视频数据包进行处理。

第二方面,本发明实施例提供一种网络数据包处理装置,所述装置包括:判断模块,用于判断网卡缓存中的网络数据包是否为视频数据包;第一处理模块,用于若所述网络数据包不为视频数据包时,将所述网络数据包存储至第一数据队列,由网络协议栈对所述第一数据队列中的所述网络数据包进行处理;第二处理模块,用于若所述网络数据包为视频数据包时,将所述视频数据包存储至第二数据队列,当到达预设条件时,视频数据处理线程对所述第二数据队列中的所述视频数据包进行处理。

与现有技术相比,本发明实施例提供的一种网络数据包处理方法及装置,通过首先判断网卡缓存中的网络数据包是否为视频数据包,当所述网络数据包为视频数据包时,将所述网络数据包存储至第二数据队列,并且当到达预设条件时,视频数据处理线程对所述第二数据队列中的所述网络数据包进行处理,通过这种方式,使得不需要将从网卡缓存中获取的每个网络数据包都传输至网络协议栈进行处理,将视频数据包采用视频数据处理线程进行处理,有效降低了终端设备采用网络协议栈处理网络数据包的次数,优化了网络数据包收包效率,可以在无需增加终端设备的成本的情况下,实现更多网络数据包的处理。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1是本发明实施例提供的终端设备之间交互的示意图。

图2是本发明第一实施例提供的一种网络数据包处理方法的流程图。

图3是本发明第一实施例提供的将网络数据包存储至第一数据队列的原理示意图。

图4是本发明第一实施例提供的一种对所述网络数据包的校验和字段进行验证的方法的流程图。

图5是本发明第一实施例提供的一种网络数据包处理方法中的步骤S520的一种详细流程图。

图6是本发明第一实施例提供的将网络数据包存储至第二数据队列的原理示意图。

图7是本发明第一实施例提供的一种网络数据包处理方法中的步骤S530的一种详细流程图。

图8是本发明第一实施例提供的一种网络数据包处理方法中的步骤S540的一种详细流程图。

图9是本发明第二实施例提供的一种网络数据包处理装置的功能模块示意图。

具体实施方式

下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性或时间先后。

图1示出了本发明实施例提供的多个终端设备之间进行交互的示意图。多个所述终端设备(图中所示101至103)之间通过网络200进行通信连接,以进行数据通信或交互。所述终端设备(图中所示101至103)可以是视频监控服务器VM、网络硬盘录像机NVR、网络摄像机、网络服务器、数据库服务器、个人电脑(personal computer,PC)、穿戴设备等。

作为一种实施方式,所述终端设备101为网络硬盘录像机NVR,所述终端设备102及所述终端设备103均为网络摄像机,此时本发明实施例提供的网络数据包处理方法及装置运行于网络硬盘录像机NVR上,网络硬盘录像机NVR的网卡用于接收网络摄像机发送的网络数据包,并缓存在网卡缓存中。

图2示出了本发明第一实施例提供的一种网络数据包处理方法的流程图,请参阅图2,所述方法包括:

步骤S300,判断网卡缓存中的网络数据包是否为视频数据包。

所述网络数据包,是由终端设备(发送端)对数据内容经过从应用层、BSD Socket层、传输层、网络层、直至硬件链路层的层层封装后形成的,其为TCP/IP协议通信传输中的数据单位。

当终端设备(接收端)的网卡接收到来自其它终端设备(发送端)发送的网络数据包时,将网络数据包按照一定的数据格式缓存到其网卡缓存中。

作为一种实施方式,当所述终端设备的操作系统为Linux时,终端设备将接收到的网络数据包,由于Linux内核中定义SKB包作为存储网络数据包的数据结构,因此将接收到的网络数据包解析并生成对应的SKB包格式的SKB包,并将所述SKB包存储在网卡缓存中。

请参阅图3,图3中黑色圆圈1-8所示为第一数据队列中流链表,所述流链表中每个节点(即一个黑色圆圈)代表一个数据流头信息(后续用head_skb表示),每个head_skb对应一个数据链表,每个数据链表上有多个网络数据包。所述终端设备每次从网卡缓存中读取一个网络数据包,判断所述第一数据队列(Linux内核中为gro_list队列)是否存储所述网络数据包对应的数据流头信息(后续用head_skb表示),若没有,则创建所述所述网络数据包对应的head_skb挂载到如图3中所示的流链表的尾部。可以理解的是,所述第一数据队列(即Linux内核中为gro_list队列)中的流链表存储了所有网络缓存中网络数据包(包括视频数据包和非视频数据包)对应的数据链表头信息(即head_skb)。

进一步的,判断所述网络数据包是否为视频数据包。其中,判断所述网络数据包是否为视频数据包的实施方式有很多种,由于所述网络数据包都是经过层层封装后得到,其遵循一定的数据封包格式。常用视频流封包格式包括RTP流、TS流、PS流等,每种格式都有固定的头部信息,按照每种封包头部格式去校验载荷字段,就可以得到载荷类型,从而判断出是否是视频数据包。

步骤S400,若所述网络数据包不为视频数据包时,将所述网络数据包存储至第一数据队列,由网络协议栈对所述第一数据队列中的所述网络数据包进行处理。

作为一种实施方式,当所述网络数据包不为视频数据包且所述第一数据队列中的网络数据包的数量不再增加时,由网络协议栈对所述第一数据队列中的所述网络数据包进行处理。

请继续参阅图3,若所述网络数据包不为视频数据包时,将所述网络数据包挂载到所述第一数据队列(即Linux内核中为gro_list队列)中,即挂载至所述网络数据包对应的head_skb(如图3中所示灰色圆圈1)的数据链表的尾部,同时更新所述网络数据包对应的head_skb中的数据长度字段。

步骤S500,若所述网络数据包为视频数据包时,将所述视频数据包存储至第二数据队列,当到达预设条件时,视频数据处理线程对所述第二数据队列中的所述视频数据包进行处理。

请参阅图3,若所述网络数据包为视频数据包,作为一种实施方式,将所述第一数据队列中所述网络数据包对应的head_skb(如图3中所示灰色圆圈2)的process_flag字段设置为1,当网络协议栈对所述第一数据队列中的所述网络数据包进行处理时,若发现所述网络数据包对应的head_skb的process_flag字段为1,则不进行处理,通过这种方式,可以减少网络协议栈处理网络数据包的次数。

进一步的,作为一种实施方式,若所述网络数据包为视频数据包且所述网络数据包的校验和字段验证成功时,将所述视频数据包存储至第二数据队列。

大多数终端设备支持硬件计算校验和的操作,此时根据已经计算好的校验和来判断网络数据包是否有效即可,即完成网络数据包的校验和字段进行验证;如果终端设备不支持硬件校验和计算,则可以自行计算校验和。

可以理解的是,由于当所述网络数据包为视频数据包时,会将所述网络数据包存储至第二数据队列,并且当到达预设条件时,视频数据处理线程对所述第二数据队列中的所述网络数据包进行处理。也就是说,当视频数据处理线程对所述第二数据队列中的所述网络数据包进行处理后,不会再由网络协议栈对网络数据包进行处理,即后续将不再执行校验和字段的验证,因此在此处先进行校验和字段的验证,能够保证数据传输的有效性及准确性。

其中,对所述网络数据包的校验和字段进行验证的实施方式有多种,例如,可以验证所述网络数据包中与网络层对应的第一校验和字段,也可以验证所述网络数据包中与传输层对应的第二校验和字段。

进一步的,请参阅图4,作为一种实施方式,所述对所述网络数据包的校验和字段进行验证的步骤包括:

步骤S511,对所述网络数据包的第一校验和字段进行验证,所述第一校验和字段与网络层对应。

步骤S512,若所述第一校验和字段验证成功,则对所述网络数据包的第二校验和字段进行验证,所述第二校验和字段与传输层对应。

可以理解的是,所述第二校验和字段可以与TCP传输层对应,也可以与UDP传输层对应。

步骤S513,若所述第二校验和字段验证成功,则验证成功。

若验证失败,则直接丢弃所述网络数据包,生成并发送ACK报文到发送端请求重传数据。

通过对第一校验和字段及第二校验和字段的两层验证,能够进一步保证传输的有效性及准确性。

作为一种实施方式,请参阅图5,当所述网络数据包为视频数据包时,将所述视频数据包存储至第二数据队列之前,所述方法还包括:

步骤S521,查询是否存储有所述视频数据包对应的视频流头信息。

若已存储有所述视频数据包对应的视频流头信息,则执行步骤S522,否则,执行步骤S523。

步骤S522,将所述视频数据包关联至所述视频流头信息,并更新所述视频流头信息中的长度字段。

步骤S523,创建并存储所述视频数据包对应的视频流头信息。

请参阅图6,图6中白色圆圈2-5及8所示为第二数据队列中流链表,所述流链表中每个节点(即一个带数字的白色圆圈)代表一个视频流头信息(后续用head_skb表示),每个head_skb对应一个数据链表,每个数据链表上有多个视频数据包(即不带数字的白色圆圈)。当所述网络数据包为视频数据包且所述网络数据包的校验和字段验证成功时,判断所述第二数据队列的流链表中是否有所述网络数据包对应的head_skb,若没有,则创建所述所述视频数据包对应的head_skb,并将所述视频数据包挂载到所述head_skb对应的数据链表;若有,则直接将所述视频数据包挂载到所述head_skb对应的数据链表,并更新第一队列中所述视频数据包对应的视频流头信息head_skb中的长度字段。例如,若所述第二数据队列的流链表中已存储有所述视频数据包对应的视频流头信息head_skb,假设为图6中所示的视频队列2的视频流头信息head_skb,则将直接将所述视频数据包挂载到视频队列2的视频流头信息head_skb对应的数据链表的尾部,并且更新第一队列中所述视频数据包对应的视频流头信息head_skb中的长度字段,即图3中所示的视频队列2的数据流头信息(图3中流链表中从左至右第2个黑色圆圈所示)中的长度字段,假设更新前图3中所示的视频队列2的数据流头信息中的长度字段的值为100字节,所述网络数据包的大小为10字节,则图3中视频队列2的数据流头信息中的长度字段的值更新后为110字节。

优选的,此处可以进一步分析所述网络数据包的载荷字段,将获取的网络数据包的载荷类型保存到所述网络数据包对应的head_skb中的载荷字段payload_flag中。在首次判断出所述视频流的载荷类型后,同一个视频流的后续视频数据包的载荷类型保持不变,直接按照之前判断的结果处理即可。

作为一种实施方式,请参阅图7,在查询出存储有所述视频数据包对应的视频流头信息之后,所述方法还包括:

步骤S531,判断是否出现丢包情况。

步骤S532,若出现丢包情况,将所述视频数据包及所述视频数据包对应的视频流头信息传输至网络协议栈处理。

步骤S533,当所述视频数据包对应的视频流头信息传输至BSD Socket层时,BSD Socket层不再将所述视频数据包对应的视频流头信息传输至应用层进行处理。

请参阅图3,若视频队列2已经收到了视频数据包100,此时若收到了视频数据包102,则可以判断出此时出现了丢包的情况。当出现了丢包情况,则将所述视频数据包102及所述视频数据包102对应的视频流头信息head_skb(如图中所示的灰色圆圈2)传输至网络协议栈处理,同时将所述视频数据包102对应的视频流头信息head_skb中的数据长度字段清零,将所述head_skb的数据链表清空。当所述视频数据包102对应的视频流头信息head_skb传输至BSD Socket层时,BSD Socket层不再将所述视频数据包对应的视频流头信息head_skb传输至应用层进行处理,即不再将所述视频数据包对应的视频流头信息head_skb拷贝至应用层的业务缓存中进行处理。相对于现有的网络协议栈的处理,通过这种方式,能够减少一次数据拷贝,从而进一步优化了网络收包的效率。并且若此时所述视频数据包102为TCP连接,则网络协议栈可以根据所述视频数据包102及所述视频数据包102对应的视频流头信息head_skb判断出此时出现了丢包情况,并根据这两个信息,向发送端请求重传网络数据包101,能够保证数据的传输的有效性及正确性。

将所述视频数据包存储至第二数据队列之后,当到达预设条件时,视频数据处理线程对所述第二数据队列中的所述视频数据包进行处理。

所述预设条件的实施方式有多种,例如,可以是当所述第二数据队列中所述网络数据包的数量不为零时,唤醒视频数据处理线程对所述第二数据队列中的所述网络数据包进行处理;也可以是在每当所述第二数据队列中收满一帧数据时,唤醒视频数据处理线程对所述第二数据队列中的所述网络数据包进行处理;还可以是在每当所述第二数据队列中收满一个I帧组时,唤醒视频数据处理线程对所述第二数据队列中的所述网络数据包进行处理。

即当到达预设条件时,唤醒视频数据处理线程对所述第二数据队列中的所述网络数据包进行处理;当未到达预设条件时,视频数据处理线程进行休眠状态。这种方式下,当未到达预设条件时,所述视频数据处理线程始终处于休眠状态,能够降低终端设备的处理负载。

作为一种所述方式,可以在判断出所述网络数据包为视频数据包,将所述网络数据包存储至第二数据队列之后,由GRO收包处理函数来判断是否到达预设条件,若到达预设条件时,由GRO收包处理函数唤醒视频数据处理线程执行后续处理操作。

进一步的,所述视频数据处理线程对所述第二数据队列中的所述网络数据包进行处理,包括:视频数据处理线程分别将所述第二数据队列中的各个所述网络数据包存储至对应的第三数据队列,以使业务处理线程或进程对所述第三数据队列中的网络数据包进行处理。

请参阅图8,作为一种具体的实施方式,可以包括:

步骤S541,判断所述第二数据队列中所述网络数据包的数量是否为零。

若所述第二数据队列中所述网络数据包的数量不为零,执行步骤S542,否则,执行步骤S548。

步骤S542,所述视频数据处理线程根据各个所述网络数据包对应的四元组,分别将各个所述网络数据包关联至对应的第三数据队列。

所述四元组包括所述网络数据包的源地址、目的地址、源端口、及目的端口。

所述第三数据队列是指与视频通道对应的业务缓存,即对于来自于同一个终端设备的视频数据包会关联在同一个与视频通道对应的业务缓存中。

作为一种实施方式,所述视频数据处理线程依次读取并处理第二数据队列中所述网络数据包,此时,第二数据队列中的网络数据包均为视频数据包。将当前处理的所述视频数据包的源地址、目的地址、源端口、及目的端口依次与已存储视频通道对应的业务缓存(即第三数据队列)的网络数据包对应的源地址、目的地址、源端口、及目的端口进行匹配,若匹配成功,则将所述视频数据包与所述对应的第三数据队列关联起来。

步骤S543,所述视频数据处理线程根据各个所述网络数据包的载荷字段,分别将各个所述网络数据包按照预定数据格式存储至对应的第三数据队列,以使业务处理线程或进程对所述第三数据队列中的网络数据包进行处理。

通过步骤S542可以将属于来自于同一个终端设备的视频数据包会关联在同一个与视频通道对应的业务缓存中。进一步的,来自于同一个终端设备的视频数据包,可能是不同的视频流,因此所述视频数据处理线程根据各个所述网络数据包的载荷字段,对来自同一个终端设备的视频数据包的不同视频流进行区分,并分别将各个所述网络数据包按照预定数据格式存储至对应的第三数据队列。

作为步骤S543的一种实施方式,所述视频数据处理线程分析SKB包的载荷字段payload_flag得到载荷类型,根据载荷类型获取视频码流(RTP流、TS流、PS流或其它视频流等),并根据业务需求,按照预定的格式将其拷贝到对应通道的业务缓存(即第三数据队列)中。例如,若业务处理线程或进程的业务需求是解码流程,则需要按照帧为单位将其拷贝到对应通道的业务缓存(即第三数据队列)中,由业务处理线程或进程进行拼帧处理;若业务处理线程或进程的业务需求是存储流程,则需要按照存储格式将其拷贝到对应通道的业务缓存(即第三数据队列)中,由业务处理线程或进程进行数据拼接处理。

步骤S544,释放所述网络数据包。

步骤S545,判断所述网络数据包是否属于TCP流。

若是,执行步骤S546,否则,执行步骤S541。

步骤S546,是否已经接收到了指定数目的网络数据包。

若是,执行步骤S547,否则,执行步骤S541。

步骤S547,生成并返回ACK报文。

通过步骤S546至步骤S547,能够保证TCP流的有序和正常传输。

步骤S548,视频数据处理线程休眠。

当第二数据队列中没有网络数据包可处理时,视频数据处理线程再次进入休眠状态。

可以理解的是,当所述终端设备为网络硬盘录像机NVR,由于其接收到的网络数据包大部分都是来自于网络摄像机的视频网络数据包,当在网络硬盘录像机NVR上运行本发明实施例提供的网络数据包处理方法,更能够大大降低了终端设备采用网络协议栈处理网络数据包的次数,优化了网络数据包收包效率,进一步的,提高了网络硬盘录像机NVR接入网络摄像机的路数。

本发明实施例提供的网络数据包处理方法,通过首先判断网卡缓存中的网络数据包是否为视频数据包,当所述网络数据包为网络数据包时,将所述网络数据包存储至第二数据队列,并且当到达预设条件时,视频数据处理线程对所述第二数据队列中的所述网络数据包进行处理,通过这种方式,使得不需要将从网卡缓存中获取的每个网络数据包都传输至网络协议栈进行处理,将视频数据包采用视频数据处理线程进行处理,有效降低了终端设备采用网络协议栈处理网络数据包的次数,优化了网络数据包收包效率,可以在无需增加终端设备的成本的情况下,实现更多网络数据包的处理。

请参阅图9,是本发明第二实施例提供的一种网络数据包处理装置110的功能模块示意图。所述网络数据包处理装置110运行于终端设备(图1中所示101至103)中。所述网络数据包处理装置110包括判断模块111、第一处理模块112、以及第二处理模块113。

所述判断模块111,用于判断网卡缓存中的网络数据包是否为视频数据包。

第一处理模块112,用于若所述网络数据包不为视频数据包时,将所述网络数据包存储至第一数据队列,由网络协议栈对所述第一数据队列中的所述网络数据包进行处理。

作为一种具体的实施方式,所述第一处理模块112,具体用于:若所述网络数据包不为视频数据包且所述第一数据队列中的网络数据包的数量不再增加时,由网络协议栈对所述第一数据队列中的所述网络数据包进行处理。

第二处理模块113,用于若所述网络数据包为视频数据包时,将所述视频数据包存储至第二数据队列,当到达预设条件时,视频数据处理线程对所述第二数据队列中的所述视频数据包进行处理。

作为一种具体的实施方式,所述第二处理模块113,具体用于:所述视频数据处理线程根据各个所述网络数据包对应的四元组,分别将各个所述网络数据包关联至对应的第三数据队列,其中,所述四元组包括所述网络数据包的源地址、目的地址、源端口、及目的端口;所述视频数据处理线程根据各个所述网络数据包的载荷字段,分别将各个所述网络数据包按照预定数据格式存储至对应的第三数据队列。

作为另一种具体的实施方式,所述第二处理模块113,具体用于:若所述网络数据包为视频数据包且所述网络数据包的校验和字段验证成功时,将所述视频数据包存储至第二数据队列。

进一步的,对所述网络数据包的校验和字段验证的方法包括:对所述网络数据包的第一校验和字段进行验证,所述第一校验和字段与网络层对应;若所述第一校验和字段验证成功,则对所述网络数据包的第二校验和字段进行验证,所述第二校验和字段与传输层对应;若所述第二校验和字段验证成功,则验证成功。

作为又一种具体的实施方式,所述预设条件包括所述第二数据队列中所述网络数据包的数量不为零或每当所述第二数据队列中收满一帧数据时或每当所述第二数据队列中收满一个I帧组时。

作为再一种具体的实施方式,所述第二处理模块113,具体用于:在所述若所述网络数据包为视频数据包时,将所述视频数据包存储至第二数据队列之前,查询是否存储有所述视频数据包对应的视频流头信息;若是,将所述视频数据包关联至所述视频流头信息,并更新所述视频流头信息中的长度字段;若否,创建并存储所述视频数据包对应的视频流头信息。

进一步的,所述第二处理模块113,还用于:在查询出存储有所述视频数据包对应的视频流头信息之后,判断是否出现丢包情况;若出现丢包情况,将所述视频数据包及所述视频数据包对应的视频流头信息传输至网络协议栈处理;当所述视频数据包对应的视频流头信息传输至BSD Socket层时,BSD Socket层不再将所述视频数据包对应的视频流头信息传输至应用层进行处理。

以上各模块可以是由软件代码实现,也同样可以由硬件例如集成电路芯片实现。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

本发明实施例所提供的网络数据包处理装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

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