发明内容
为了避免需要事先确定客户端数量并为之分配时钟分量,保证多客户端环境下更有效的标识客户端,克服客户端的标识协商和维护带来的系统复杂性,本发明提供了一种文件同步中向量时钟的实现方法及系统,其允许随着客户端的加入,动态调整时钟分量的个数,通过标准的UUID来完成客户端的标识,协助用户完成向量时钟的管理和操纵,有助于版本处理和冲突检测。
为实现上述目的,本发明提供了一种文件同步中向量时钟的实现方法,该方法包括:
步骤1,当用户在两个终端上对文件进行操作时,该两个终端进行分量版本自增操作,调整各自的向量时钟;
步骤2,两个终端中的一个终端向另一个终端发送数据同步请求,该另一终端响应所述同步请求,获取本地同步目录文件元数据信息后发送给该一个终端;
步骤3,所述一个终端收到另一终端的本地同步目录文件元数据信息后,根据所述另一终端的本地同步目录文件元数据信息和自身的本地同步目录文件元数据信息进行向量时钟比较操作,根据比较结果执行同步操作;
步骤4,所述两个终端执行同步操作后进行向量时钟合并操作,分别获得新的向量时钟。
所述向量时钟是由时钟分量组成的集合,每个时钟分量包括通用唯一识别码UUID和版本号,其中UUID用于唯一的标识客户端,遵循开放软件基金会标准,该版本号简称版本。
进一步的,所述步骤1包括:
步骤11,每个终端各自输入需要调整的向量时钟的时钟分量和版本增量;
步骤12,若所述每个终端的向量时钟中存在与所述需要调整的向量时钟的相同的时钟分量,则调整该终端的向量时钟的版本为当前版本与输入的版本增量之和;否则,先添加所述需要调整的时钟分量,分量的识别码为所述需要调整时钟分量的唯一识别码,版本号为所述需要调整该终端的向量时钟的版本为输入的版本增量。
进一步的,所述步骤3包括:
步骤31,若VCa中任意一时钟分量的版本均小于等于VCb对应时钟分量的版本,且VCa中存在至少一时钟分量的版本小于VCb对应时钟分量的版本,则比较结果为VCa小于VCb;
若VCa中任意一时钟分量的版本均等于VCb对应时钟分量的版本,则比较结果为VCa等于VCb;
若VCa中任意一时钟分量的版本均大于等于VCb对应时钟分量的版本,且VCa中存在至少一时钟分量的版本大于VCb对应时钟分量的版本,则比较结果为VCa大于VCb;
若VCa中存在至少一时钟分量的版本小于VCb对应时钟分量的版本,且VCa中存在至少一时钟分量的版本大于VCb对应时钟分量的版本,则比较结果为VCa与VCb冲突;
步骤32,若VCa小于VCb,说明在所述另一个终端的文件上有操作,同步操作为:更新所述一个终端的相应文件;
若VCa等于VCb,说明在所述两个终端的文件上均无操作,不进行同步操作;
若VCa大于VCb,说明在所述一个终端的文件上有修改操作,同步操作为:更新所述另一个终端的相应文件;
若VCa与VCb冲突,说明在所述两个终端的文件上均有操作,更新所述两个终端的相应文件;
其中VCa为所述一个终端的向量时钟,VCb为所述另一终端的向量时钟。
进一步的,所述步骤4包括:
步骤41,将所述两个向量时钟的时钟分量对应的通用唯一识别码的并集作为所述新的向量时钟的时钟分量对应的通用唯一识别码;
步骤42,将所述新的向量时钟的任一时钟分量的版本设置为所述两个向量时钟中对应时钟分量的版本中的最大值,若某向量时钟不存在对应时钟分量,则设置新向量时钟中对应时钟分量的版本为另一存在的对应时钟分量的版本。
进一步的,文件同步操作在多个终端上,该多个终端由上述两个终端对组成。
为实现上述目的,本发明还提供了一种文件同步中向量时钟的实现系统,该系统包括:
向量时钟自增模块,当用户在两个终端上对文件进行操作时,该两个终端进行分量版本自增操作,调整各自的向量时钟;
同步请求模块,两个终端中的一个终端向另一个终端发送数据同步请求,该另一终端响应所述同步请求,获取本地同步目录文件元数据信息后发送给该一个终端;
向量时钟比较模块,所述一个终端收到另一终端的本地同步目录文件元数据信息后,根据所述另一终端的本地同步目录文件元数据信息和自身的本地同步目录文件元数据信息进行向量时钟比较操作,根据比较结果执行同步操作;
向量时钟合并模块,所述两个终端执行同步操作后进行向量时钟合并操作,分别获得新的向量时钟;
所述向量时钟是由时钟分量组成的集合,每个时钟分量包括通用唯一识别码UUID和版本号,其中UUID用于唯一的标识客户端,遵循开放软件基金会标准,该版本号简称版本。进一步的所述向量时钟自增模块包括:
输入模块,每个终端各自输入需要调整的向量时钟的时钟分量和版本增量;
调整模块,若所述每个终端的向量时钟中存在与所述需要调整的向量时钟的相同的时钟分量,则调整该终端的向量时钟的版本为当前版本与输入的版本增量之和;否则,先添加所述需要调整的时钟分量,分量的识别码为所述需要调整时钟分量的唯一识别码,版本号为所述需要调整该终端的向量时钟的版本为输入的版本增量。
进一步的所述向量时钟比较模块包括:
比较模块,若VCa中任意一时钟分量的版本均小于等于VCb对应时钟分量的版本,且VCa中存在至少一时钟分量的版本小于VCb对应时钟分量的版本,则比较结果为VCa小于VCb;
若VCa中任意一时钟分量的版本均等于VCb对应时钟分量的版本,则比较结果为VCa等于VCb;
若VCa中任意一时钟分量的版本均大于等于VCb对应时钟分量的版本,且VCa中存在至少一时钟分量的版本大于VCb对应时钟分量的版本,则比较结果为VCa大于VCb;
若VCa中存在至少一时钟分量的版本小于VCb对应时钟分量的版本,且VCa中存在至少一时钟分量的版本大于VCb对应时钟分量的版本,则比较结果为VCa与VCb冲突;
同步模块,若VCa小于VCb,说明在所述另一个终端的文件上有操作,同步操作为:更新所述一个终端的相应文件;
若VCa等于VCb,说明在所述两个终端的文件上均无操作,不进行同步操作;
若VCa大于VCb,说明在所述一个终端的文件上有修改操作,同步操作为:更新所述另一个终端的相应文件;
若VCa与VCb冲突,说明在所述两个终端的文件上均有操作,更新所述两个终端的相应文件;
其中VCa为所述一个终端的向量时钟,VCb为所述另一终端的向量时钟。
进一步的所述向量时钟合并模块包括:
识别码合并模块,将所述两个向量时钟的时钟分量对应的通用唯一识别码的并集作为所述新的向量时钟的时钟分量对应的通用唯一识别码;
版本合并模块,将所述新的向量时钟的任一时钟分量的版本设置为所述两个向量时钟中对应时钟分量的版本中的最大值,若某向量时钟不存在对应时钟分量,则设置新向量时钟中对应时钟分量的版本为另一存在对应时钟分量的版本。
进一步的,文件同步操作在多个终端上,该多个终端由上述两个终端对的模块实现同步操作。
本发明的有益功效在于:首先,向量时钟分量数随着客户端的加入,动态调整分量的个数,即不需要事先确定所有客户端数量及预先分配此数量长度;其次,本方法通过标准的UUID来完成客户端的标识,通过调用操作系统或特定的开发库中已存在的功能,即可得到客户端的标识,有效的克服了客户端的标识协商和维护带来的系统复杂性;此外,本方法还提供了一套操纵向量时钟的主要接口,包括向量时钟比较操作,向量时钟分量版本自增操作,向量时钟合并操作,可协助用户完成向量时钟的管理和操纵,有助于版本处理和冲突检测。
以下结合附图和具体实施例对本发明进行详细描述,但不作为对本发明的限定。
具体实施方式
本发明提供多客户端数据同步中向量时钟的一种实现方法,具体地:定义向量时钟是由向量时钟分量(以下简称“时钟分量”)组成的集合,每个时钟分量包含但不限于如下信息要素:UUID和版本号V。其中,UUID用于唯一的标识客户端,遵循开放软件基金会(OSF)标准(RFC4122和ISO/IEC11578:1996),典型的实现方式是在客户端首次安装时通过调用操作系统的接口生成。版本号V是一个整数,标示对应数据的版本,在数据被修改时,按照某些预定义的规则进行自增。在上述格式的基础上,本发明还提供了可用于上述向量时钟实现方式的三种操作:比较操作,用于确定两个向量时钟的顺序和冲突检测;分量版本自增操作,用于在客户端对文件操作时调整向量时钟;向量时钟合并操作,用于冲突解决时调整合并两个冲突的向量时钟。
本方法通过重用现有的操作系统的UUID生成功能,解决了客户端的唯一标识问题,有效的克服了客户端的标识协商和维护带来的系统复杂性;允许随着客户端的加入,动态调整时钟分量的个数,因而不必事先确定或预先分配向量长度。
向量时钟的格式:本发明中的所述向量时钟是由时钟分量组成的集合,每个时钟分量包含但不限于如下信息要素:UUID和版本V是。其中,UUID为客户端的唯一标识,遵循开放软件基金会(OSF)的标准。版本V是一个整数,标示对应数据的版本,在数据被修改时,按照某些预定义的规则进行自增。一种典型的实现方案:向量时钟格式为数组:[{UUID1,V1},...,{UUIDi,Vi},...,{UUIDn,Vn}],其中时钟分量i是一个二元组,UUIDi是客户端i的UUID,在客户端安装时调用操作系统的接口生成;Vi是文件被客户端i操作的次数,所述操作包括但不限于添加、删除、修改等。当有新的客户端加入时,可以通过简单的增加一个数组元素的方式动态调整时钟分量。
向量时钟比较操作:该操作用于确定两个向量时钟的顺序和检测数据版本冲突。具体地,该操作输入为用于比较的两个向量时钟VCa和VCb,输出为下列比较结果之一:
VCa小于VCb:VCa中任意一时钟分量的版本均小于等于VCb对应分量的版本,且VCa中存在至少一时钟分量的版本小于VCb对应分量的版本。
VCa等于VCb:VCa中任意一时钟分量版本均等于VCb中对应分量的版本。
VCa大于VCb:VCa中任意一时钟分量的版本均大于等于VCb中对应分量的版本,且VCa中存在至少一个时钟分量版本大于VCb中对应分量的版本。
VCa和VCb冲突:VCa中存在至少一个时钟分量的版本小于VCb中对应分量的版本,且VCa存在至少一个时钟分量的版本大于VCb中对应分量的版本。
分量版本自增操作:该操作用于在客户端对文件操作时调整向量时钟。具体地,该操作的输入为需要调整的向量时钟、需要调整的分量(或其UUID)和版本增量,输出为调整后的向量时钟。更新操作结果包含但不限于以下特征:
若此向量时钟中存在与调整分量UUID相同的时钟分量,则调整该时钟分量的版本为当前版本与输入的版本增量之和。
若此向量时钟不存在上述时钟分量,则在向量时钟中添加一个新时钟分量,对应的UUID设置为调整分量的UUID,版本为输入的版本增量。
向量时钟合并操作:该操作用于解决冲突后调整合并两个冲突的向量时钟。具体地,该操作的输入为需要合并的两个或多个向量时钟,输出为合并后的向量时钟。所述合并后的向量时钟包含但不限于如下特征:
合并后的向量时钟的分量对应的UUID为原两个或多个向量时钟的分量对应的UUID的并集。
合并后的向量时钟的任一分量的版本为原两个或多个向量时钟中对应分量的版本中的最大值。若某向量时钟不存在对应的分量,则相当于该时钟中对应分量的版本号为0。
图1是本发明的文件同步中向量时钟的实现方法流程图。如图1所示,该方法包括:
步骤1,当用户在多个终端上对文件进行操作时,终端进行分量版本自增操作,调整各自的向量时钟;
步骤2,两个终端中的一个终端向另一个终端发送数据同步请求,该另一终端响应所述同步请求,获取本地同步目录文件元数据信息后发送给该一个终端;
步骤3,所述一个终端收到另一终端的本地同步目录文件元数据信息后,根据所述另一终端的本地同步目录文件元数据信息和自身的本地同步目录文件元数据信息进行向量时钟比较操作,根据比较结果执行同步操作;
步骤4,所述两个终端执行同步操作后进行向量时钟合并操作,分别获得新的向量时钟;
所述向量时钟是由时钟分量组成的集合,每个时钟分量包括通用唯一识别码UUID和版本号,其中UUID用于唯一的标识客户端,遵循开放软件基金会(OSF)标准(RFC4122和ISO/IEC11578:1996),该版本号简称版本,通用唯一识别码UUID简称通用唯一识别码。
进一步的,所述步骤1包括:
步骤11,每个终端各自输入需要调整的向量时钟的时钟分量和版本增量;
步骤12,若所述每个终端的向量时钟中存在与所述需要调整的向量时钟的相同的时钟分量,则调整该终端的向量时钟的版本为当前版本与输入的版本增量之和;否则,先添加所述需要调整的时钟分量,分量的识别码为所述需要调整时钟分量的唯一识别码,版本号为所述需要调整该终端的向量时钟的版本为输入的版本增量。
进一步的,所述步骤3包括:
步骤31,若VCa中任意一时钟分量的版本均小于等于VCb对应时钟分量的版本,且VCa中存在至少一时钟分量的版本小于VCb对应时钟分量的版本,则比较结果为VCa小于VCb;
若VCa中任意一时钟分量的版本均等于VCb对应时钟分量的版本,则比较结果为VCa等于VCb;
若VCa中任意一时钟分量的版本均大于等于VCb对应时钟分量的版本,且VCa中存在至少一时钟分量的版本大于VCb对应时钟分量的版本,则比较结果为VCa大于VCb;
若VCa中存在至少一时钟分量的版本小于VCb对应时钟分量的版本,且VCa中存在至少一时钟分量的版本大于VCb对应时钟分量的版本,则比较结果为VCa与VCb冲突;
步骤32,若VCa小于VCb,说明在所述另一个终端的文件上有操作,同步操作为:更新所述一个终端的相应文件;
若VCa等于VCb,说明在所述两个终端的文件上均无操作,不进行同步操作;
若VCa大于VCb,说明在所述一个终端的文件上有修改操作,同步操作为:更新所述另一个终端的相应文件;
若VCa与VCb冲突,说明在所述两个终端的文件上均有操作,更新所述两个终端的相应文件;
其中VCa为所述一个终端的向量时钟,VCb为所述另一终端的向量时钟。
进一步的,所述步骤4包括:
步骤41,将所述两个向量时钟的时钟分量对应的通用唯一识别码的并集作为所述新的向量时钟的时钟分量对应的通用唯一识别码;
步骤42,将所述新的向量时钟的任一时钟分量的版本设置为所述两个向量时钟中对应时钟分量的版本中的最大值,若某向量时钟不存在对应时钟分量,则设置新向量时钟中对应时钟分量的版本为另一存在对应时钟分量的版本。
进一步的,文件同步操作在多个终端上,该多个终端由上述两个终端对组成。
图2是本发明的文件同步中向量时钟的实现系统示意图。如图2所示,该系统包括:
为实现上述目的,本发明还提供了一种文件同步中向量时钟的实现系统,该系统包括:
向量时钟自增模块100,当用户在两个终端上对文件进行操作时,该两个终端进行分量版本自增操作,调整各自的向量时钟;
同步请求模块200,两个终端中的一个终端向另一个终端发送数据同步请求,该另一终端响应所述同步请求,获取本地同步目录文件元数据信息后发送给该一个终端;
向量时钟比较模块300,所述一个终端收到另一终端的本地同步目录文件元数据信息后,根据所述另一终端的本地同步目录文件元数据信息和自身的本地同步目录文件元数据信息进行向量时钟比较操作,根据比较结果执行同步操作;
向量时钟合并模块400,所述两个终端执行同步操作后进行向量时钟合并操作,分别获得新的向量时钟;
所述向量时钟是由时钟分量组成的集合,每个时钟分量包括通用唯一识别码UUID和版本号,其中UUID用于唯一的标识客户端,遵循开放软件基金会(OSF)标准(RFC4122和ISO/IEC11578:1996),该版本号简称版本,通用唯一识别码UUID简称通用唯一识别码。
进一步的所述向量时钟自增模块100包括:
输入模块,每个终端各自输入需要调整的向量时钟的时钟分量和版本增量;
调整模块,若所述每个终端的向量时钟中存在与所述需要调整的向量时钟的相同的时钟分量,则调整该终端的向量时钟的版本为当前版本与输入的版本增量之和;否则,先添加所述需要调整的时钟分量,分量的识别码为所述需要调整时钟分量的唯一识别码,版本号为所述需要调整该终端的向量时钟的版本为输入的版本增量。
进一步的所述向量时钟比较模块300包括:
比较模块,若VCa中任意一时钟分量的版本均小于等于VCb对应时钟分量的版本,且VCa中存在至少一时钟分量的版本小于VCb对应时钟分量的版本,则比较结果为VCa小于VCb;
若VCa中任意一时钟分量的版本均等于VCb对应时钟分量的版本,则比较结果为VCa等于VCb;
若VCa中任意一时钟分量的版本均大于等于VCb对应时钟分量的版本,且VCa中存在至少一时钟分量的版本大于VCb对应时钟分量的版本,则比较结果为VCa大于VCb;
若VCa中存在至少一时钟分量的版本小于VCb对应时钟分量的版本,且VCa中存在至少一时钟分量的版本大于VCb对应时钟分量的版本,则比较结果为VCa与VCb冲突;
同步模块,若VCa小于VCb,说明在所述另一个终端的文件上有操作,同步操作为:更新所述一个终端的相应文件;
若VCa等于VCb,说明在所述两个终端的文件上均无操作,不进行同步操作;
若VCa大于VCb,说明在所述一个终端的文件上有修改操作,同步操作为:更新所述另一个终端的相应文件;
若VCa与VCb冲突,说明在所述两个终端的文件上均有操作,更新所述两个终端的相应文件;
其中VCa为所述一个终端的向量时钟,VCb为所述另一终端的向量时钟。
进一步的所述向量时钟合并模块400包括:
识别码合并模块,将所述两个向量时钟的时钟分量对应的通用唯一识别码的并集作为所述新的向量时钟的时钟分量对应的通用唯一识别码;
版本合并模块,将所述新的向量时钟的任一时钟分量的版本设置为所述两个向量时钟中对应时钟分量的版本中的最大值,若某向量时钟不存在对应时钟分量,则设置新向量时钟中对应时钟分量的版本为另一存在对应时钟分量的版本。
进一步的,文件同步操作在多个终端上,该多个终端由上述两个终端对的模块实现同步操作。
图3是本发明的一实施例的文件同步中向量时钟的实现方法流程图。如图3所示:
初始状态:两个终端设备A与B(以下简称“终端A”、“终端B”)处于同步状态。同步目录下存在文件fileA.txt、fileB.txt、fileC.txt、fileD.txt。初始状态下个文件在终端上的向量时钟如下(具体实现可以使数据库存储也可以是文件等):
303用户在终端A上对文件做修改操作。
具体地,假设用户在终端A上进行了如下操作:对文件fileB.txt与文件fileD.txt均做一次修改操作。
304用户在终端B上对文件做修改操作和添加新文件。
具体地,假设用户在终端B上进行了如下操作:对文件fileC.txt与文件fileD.txt均做一次修改操作,同时新增文件fileE.txt到同步目录中。
305终端A检测文件状态的变化,并修改所涉及文件的向量时钟VCa。
具体地,终端A检测到文件fileB.txt与fileD.txt均做了修改操作,据关键点3分量版本自增操作知,需要调整的向量时钟为VCa中UUIDa对应的时钟分量,版本增量均为1,调整后的终端A文件向量时钟信息如下:
306终端B检测文件状态的变化,并修改所涉及文件的向量时钟VCb。
具体地,终端B检测到文件fileC.txt与fileD.txt均做了修改操作,新增文件fileE.txt,据关键点3分量版本自增操作知,需要调整的向量时钟为VCb中UUIDb对应的时钟分量,版本增量均为1,调整后终端B文件向量时钟信息如下:
307终端A发送数据同步请求。
具体地,终端A向终端B发送数据同步请求。
308终端B响应同步请求,获取本地同步目录文件元数据信息(文件向量时钟)。
具体地,终端B收到终端A的数据同步请求。本例中获取同步目录下文件时钟向量信息如下:
309终端B发送同步目录下文件元数据(文件向量时钟)。
具体地,终端B向终端A发送上述同步目录文件元数据信息。
310终端A接收响应的元数据信息并与本地同步目录下文件元数据信息比较。
具体地,终端A接收终端B响应的元数据信息并与本地同步目录下文件元数据信息比较:据关键点2向量时钟比较操作知,对于文件fileA.txt的两个向量时钟VCa与VCb均为{(UUIDa,1)},比较结果为VCa等于VCb;对于文件fileB.txt的两个向量时钟VCa与VCb的UUID均为UUIDa,VCa的版本号为2大于VCb的版本号为1,比较结果为VCa大于VCb;对于文件fileC.txt的两个向量时钟VCa与VCb的UUID均为UUIDb,VCa的版本号为1小于VCb的版本号为2,比较结果为VCa小于VCb;对于文件fileD.txt的两个向量时钟VCa与VCb,第一个分量的UUID均为UUIDa,VCa的版本号为2大于VCb的版本号为1,同时,第二个分量的UUID均为UUIDb,VCa的版本号为1小于VCb的版本号为2,比较结果为VCa与VCb冲突;对于文件fileE.txt的向量时钟VCa与VCb,其中VCa为空,VCb为{(UUIDb,1)},比较结果为VCa小于VCb;具体文件信息及比较结果见下表:
311终端A根据向量时钟比较结果确定需要采取的同步操作。
具体地,终端A根据上述比较结果知,对于文件fileA.txt比较结果为VCa等于VCb,即文件无更新,不需要同步;对于文件fileB.txt比较结果为VCa大于VCb,说明在终端A上有最新修改,需要与终端B同步此文件并更新终端B上的此文件;对于文件fileC.txt比较结果为VCa小于VCb,说明在终端B上有最新修改,需要与终端B同步此文件并更新终端A上的此文件;对于文件fileD.txt比较结果为VCa与VCb冲突,说明在终端A与B上均对此文件修改,需要与终端B同步此文件,一种包含但不限于的方式是:在终端A上同时保留一个副本fileD(冲突).txt,此副本是终端B上修改后的文件,同时,在终端B上也保留一个副本fileD(冲突).txt,此副本是终端A上修改后的文件;对于文件fileE.txt比较结果VCa为空,VCb为{(UUIDb,1)},说明在终端B上有此文件最新修改,终端A上无此文件,需要与终端B同步此文件并在终端A上添加此文件。具体需要同步的文件为:
312终端A从终端B下载更新的文件。
具体地,终端A从终端B下载文件fileC.txt、fileD.txt及fileE.txt。
313终端A更新同步目录中的文件及向量时钟。
具体地,终端A依据310文件元数据比较结果及311确定同步的文件知:从终端B下载的文件fileC.txt覆盖本地文件fileC.txt;由于检测到文件fileD.txt为版本冲突,本文提供可能(一种包含但不限于)的冲突处理方式是:在终端A上,根据关键点4对此文件的时钟向量VCa与VCb做合并操作,产生向量时钟{(UUIDa,2),(UUIDb,2)},保留本地文件fileD.txt的同时,并且保留一个副本(此副本是从终端B上下载的文件fileD.txt)命名为fileD(冲突).txt;从客户端B上下载的文件fileE.txt创建在本地同步目录中。更新结果为:
314终端A向终端B发送文件并附带时钟向量信息。
具体地,终端A向终端B发送文件fileB.txt、fileD.txt及同步目录中文件的时钟向量信息VCa。具体为:
315终端B接收数据及时钟向量VCa并更新同步目录中的文件及向量时钟。
具体地,根据310文件元数据比较结果知,终端B上同步目录中文件向量时钟VCb与向量时钟VCa比较,对于文件fileB.txt比较结果为VCa大于VCb,说明在终端A上为最新修改,终端B接收最新修改文件覆盖本地文件,并且此文件向量时钟VCb修改为{(UUIDa,2)};对于文件fileD.txt比较结果为VCa与VCb冲突,说明在终端A与B上均对此文件修改,本文提供可能(一种包含但不限于)的冲突处理方式是:在终端B上,根据关键点4对此文件的时钟向量VCa与VCb做合并操作,产生向量时钟{(UUIDa,2),(UUIDb,2)},保留本地文件并命名为fileD(冲突).txt,同时,保留一个名为fileD.txt文件(此文件是从终端A上下载的文件fileD.txt);终端B上更新本地同步目录中对应文件及对应时钟向量后,更新结果为:
当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。