一种业务代码提交方法、处理方法、装置及电子设备与流程

文档序号:27378067发布日期:2021-11-15 18:55阅读:102来源:国知局
一种业务代码提交方法、处理方法、装置及电子设备与流程

1.本发明涉及计算机技术领域,特别涉及一种业务代码提交方法、装置、业务代码处理方法、装置、电子设备及可读存储介质。


背景技术:

2.随着大数据技术的发展,如spark(一种分布式计算平台)和flink(一种实时计算平台)等计算平台得到了广泛的使用。目前,这些计算平台的作业提交方式是直接将包含核心业务代码的python业务代码提交到相应的资源管理集群中运行,使得核心业务代码存在泄露的风险。
3.因此,如何能够避免计算平台的作业提交过程中泄露核心业务代码的情况发生,保证核心业务代码的安全性,是现今急需解决的问题。


技术实现要素:

4.本发明的目的是提供一种业务代码提交方法、装置、设备及可读存储介质,以避免计算平台的作业提交过程中泄露核心业务代码的情况发生,保证核心业务代码的安全性。
5.为解决上述技术问题,本发明提供一种业务代码提交方法,包括:
6.获取计算平台的python业务代码;
7.确定所述python业务代码中的待加密代码;其中,所述待加密代码包括核心业务处理代码;
8.对所述待加密代码进行不可逆加密,获得加密代码;其中,所述加密代码与所述待加密代码的文件格式不同;
9.将目标业务代码提交到所述计算平台对应的资源管理集群中运行;其中,所述目标业务代码包括所述加密代码和所述python业务代码中的未加密代码。
10.可选的,所述确定所述python业务代码中的待加密代码,包括:
11.根据所述python业务代码中预设的目标文件标识,确定所述待加密代码;其中,所述目标文件标识包括加密文件标识和/或忽略文件标识。
12.可选的,所述对所述待加密代码进行不可逆加密,获得加密代码,包括:
13.利用加密工具,对所述待加密代码进行不可逆加密,获得所述加密代码。
14.可选的,所述利用加密工具,对所述待加密代码进行不可逆加密,获得所述加密代码,包括:
15.利用cython加密工具,对所述待加密代码进行不可逆加密,获得所述加密代码;其中,所述待加密代码的文件格式为py文件格式,所述加密代码的文件格式为so文件格式。
16.可选的,所述计算平台为spark平台时,所述将目标业务代码提交到所述计算平台对应的资源管理集群中运行,包括:
17.利用spark命令,将所述目标业务代码提交到yarn集群中运行;其中,所述目标业务代码中的所述未加密代码包括入口函数和spark函数入口代码。
18.可选的,所述待加密代码还包括公共处理库代码。
19.本发明还提供了一种业务代码提交装置,包括:
20.获取单元,用于获取计算平台的python业务代码;
21.确定单元,用于确定所述python业务代码中的待加密代码;其中,所述待加密代码包括核心业务处理代码;
22.加密单元,用于对所述待加密代码进行不可逆加密,获得加密代码;其中,所述加密代码与所述待加密代码的文件格式不同;
23.提交单元,用于将目标业务代码提交到所述计算平台对应的资源管理集群中运行;其中,所述目标业务代码包括所述加密代码和所述python业务代码中的未加密代码。
24.本发明还提供了一种业务代码处理方法,包括:
25.计算平台对应的资源管理集群的驱动器节点获取客户端提交的目标业务代码;其中,所述目标业务代码包括计算平台的python业务代码中进行不可逆加密得到的加密代码;
26.对所述目标业务代码进行处理,生成所述目标业务代码对应的任务;
27.将所述任务发送到各自对应的所述资源管理集群的执行器节点,以利用所述执行器节点执行所述任务。
28.可选的,所述加密代码的文件格式为so文件格式,且所述资源管理集群为yarn集群时,所述对所述目标业务代码进行处理,生成所述目标业务代码对应的任务,包括:
29.所述驱动器节点利用py4j,调用java虚拟机处理所述目标业务代码,生成所述目标业务代码对应的任务。
30.可选的,所述任务包括python函数或lambda表达式时,还包括:
31.所述执行器节点为接收的每个所述任务创建各自对应的python进程;
32.利用所述执行器节点中的java虚拟机将接收的所述任务中的python函数或lambda表达式发送到对应的python进程中执行。
33.本发明还提供了一种业务代码处理装置,包括:
34.业务获取单元,用于作为计算平台对应的资源管理集群的驱动器节点,获取客户端提交的目标业务代码;其中,所述目标业务代码包括计算平台的python业务代码中进行不可逆加密得到的加密代码;
35.处理单元,用于对所述目标业务代码进行处理,生成所述目标业务代码对应的任务;
36.发送单元,用于将所述任务发送到各自对应的所述资源管理集群的执行器节点,以利用所述执行器节点执行所述任务。
37.本发明还提供了一种电子设备,包括:
38.存储器,用于存储计算机程序;
39.处理器,用于执行所述计算机程序时实现如上述所述的业务代码提交方法或如上述所述的业务代码处理方法的步骤。
40.此外,本发明还提供了一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述所述的业务代码提交方法或如上述所述的业务代码处理方法的步骤。
41.本发明所提供的一种业务代码提交方法,包括:获取计算平台的python业务代码;确定python业务代码中的待加密代码;其中,待加密代码包括核心业务处理代码;对待加密代码进行不可逆加密,获得加密代码;其中,加密代码与待加密代码的文件格式不同;将目标业务代码提交到计算平台对应的资源管理集群中运行;其中,目标业务代码包括加密代码和python业务代码中的未加密代码;
42.可见,本发明通过对待加密代码进行不可逆加密,获得加密代码,使资源管理集群可以运行加密后的目标业务代码,保证了核心业务代码的正确可靠的运行;并且整个代码加密过程不可逆,使得即便加密代码泄露也无法恢复原本python业务代码中的核心业务代码,避免了核心业务代码泄露的情况,保证了核心业务代码的安全性。此外,本发明还提供了一种业务代码提交装置、业务代码处理方法、装置、电子设备及可读存储介质,同样具有上述有益效果。
附图说明
43.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
44.图1为本发明实施例所提供的一种业务代码提交方法的流程图;
45.图2为本发明实施例所提供的一种业务代码提交装置的结构框图;
46.图3为本发明实施例所提供的一种业务代码处理方法的流程图;
47.图4为本发明实施例所提供的另一种业务代码处理方法的流程示意图;
48.图5为本发明实施例所提供的一种业务代码处理装置的结构框图;
49.图6为本发明实施例所提供的一种电子设备的结构示意图;
50.图7为本发明实施例所提供的一种电子设备的具体结构示意图。
具体实施方式
51.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
52.请参考图1,图1为本发明实施例所提供的一种业务代码提交方法的流程图。该方法可以包括:
53.步骤101:获取计算平台的python业务代码。
54.其中,本步骤中的计算平台可以为用于进行数据计算的平台,如spark平台或flink平台。本步骤中的python业务代码可以为计算平台中需要提交到资源管理集群中运行的由python代码编写的业务的程序,如spark平台中的pyspark(一种spark为python开发者提供的api)业务代码,即pyspark程序。
55.具体的,本实施例并不限定处理器获取的计算平台的python业务代码的具体内容,如python业务代码可以包括需要进行加密的待加密代码和不需要进行加密的不加密代
码这两部分,即python业务代码的编码过程中用户可以根据相应的规范编写python业务代码中的待加密代码和不加密代码,以便后续处理器识别确定python业务代码中的待加密代码;例如python业务代码中可以包括加密文件标识和/或忽略文件标识,以标识python业务代码中的待加密代码和/或不加密代码对应的文件(即.py文件),使得处理器可以根据加密文件标识和/或忽略文件标识,确定待加密代码。
56.同样的,本实施例并不限定处理器获取计算平台的python业务代码具体方式,可以由设计人员或用户自行设置,如计算平台中客户端的处理器可以直接获取用户编写或传输的python业务代码。
57.步骤102:确定python业务代码中的待加密代码;其中,待加密代码包括核心业务处理代码。
58.可以理解的是,本步骤中的待加密代码可以为python业务代码中需要进行加密的python代码。本实施例并不限定python业务代码中的待加密代码的具体内容,如待加密代码可以包括python业务代码中核心业务处理部分的python代码(即核心业务处理代码),也就是python业务代码中实现核心业务处理模块功能的代码;待加密代码还可以包括python业务代码中公共处理库部分的python代码(即公共处理库代码)。只要保证待加密代码可以包括核心业务处理代码,且资源管理集群能够正确可靠地运行待加密代码加密后的加密代码,本实施例对此不做任何限制。
59.具体的,对于本步骤中处理器确定python业务代码中的待加密代码的具体方式,可以由设计人员根据实用场景和用户需求自行设置,如python业务代码中包括预先设置的目标文件标识时,处理器可以根据python业务代码中预设的目标文件标识,确定待加密代码;其中,目标文件标识包括加密文件标识和/或忽略文件标识。例如目标文件标识为忽略文件标识(如black_list)时,处理器可以将忽略文件标识对应的python代码的文件之外的python代码的文件确定为待加密代码的文件;也就是说,用户可以在编写spark平台的python业务代码(即pyspark程序)时,通过black_list(即忽略文件标识)配置需要在加密时忽略的python代码(即不加密代码)的文件,从而使处理器可以确定待加密代码的文件。
60.步骤103:对待加密代码进行不可逆加密,获得加密代码;其中,加密代码与待加密代码的文件格式不同。
61.可以理解的是,本步骤中处理器通过对python业务代码中的待加密代码进行不可逆加密,可以得到待加密代码对应的加密后的代码(即加密代码),使得即便目标业务代码的提交过程中加密代码泄露,也无法由加密代码恢复原本的核心业务代码,避免了核心业务代码泄露的情况。
62.其中,本步骤中的加密代码可以为与待加密代码的不同文件格式的代码,即加密代码的文件格式不为py文件格式;也就是说,本步骤中处理器可以通过对待加密代码进行不可逆加密,将待加密代码的文件由.so文件加密成了其他文件格式的文件,如.so文件,即加密代码的文件格式可以为so文件格式。
63.具体的,对于本步骤中处理器对待加密代码进行不可逆加密,获得加密代码的具体方式,可以由设计人员根据实用场景和用户需求自行设置,如处理器可以利用预先编写好的加密工具(如cython加密工具),对待加密代码进行不可逆加密,将待加密代码加密为所需要的文件格式(如so文件格式或pyd文件格式)的加密代码。例如处理器可以利用
cython(一个编程语言)加密工具,对py文件格式的待加密代码进行不可逆加密,获取so文件格式的加密代码。例如计算平台为spark平台时,本步骤中处理器可以执行“python setup.py build_ext
‑‑
build

lib build/lib
‑‑
build

temp build/temp”加密命令,利用cython加密工具,对spark平台的pyspark业务代码中的待加密代码的.py文件进行不可逆加密,得到加密后的目标业务代码中的加密代码的.so文件。
64.具体的,本实施例并不限定处理器对待加密代码进行不可逆加密,获得加密代码的具体过程,如可以采用与现有技术中的不可逆加密方法相同或相似的方式实现,例如处理器可以利用cython加密工具,先将待加密代码的.py文件编译为.c文件,再将.c文件编译为.so文件,得到加密代码。
65.步骤104:将目标业务代码提交到计算平台对应的资源管理集群中运行;其中,目标业务代码包括加密代码和python业务代码中的未加密代码。
66.可以理解的是,本步骤中的目标业务代码可以为加密后的python业务代码,即目标业务代码可以包括python业务代码中待加密代码对应的加密代码和python业务代码中的未加密代码。本步骤中计算平台对应的资源管理集群可以为运行计算平台的目标业务代码的集群,如spark平台或flink平台对应的yarn(yet another resource negotiator,另一种资源协调者)集群或者spark平台对应的mesos(一种开源分布式资源管理框架)集群或spark集群。
67.具体的,对于本步骤中处理器将目标业务代码提交到计算平台对应的资源管理集群中运行的具体方式,可以由设计人员自行设置,如可以采用与现有技术中的业务代码提交方法相同或相似的方式实现,如spark on yarn部署模式下,即计算平台为spark平台且资源管理集群为yarn集群时,处理器利用spark命令,将目标业务代码提交到yarn集群中运行。
68.需要说明的是,本实施例中处理器可以将目标业务代码提交到计算平台对应的资源管理集群,使资源管理集群能够正确可靠地运行目标业务代码中的加密代码,例如计算平台为spark平台时,yarn集群可以正常运行spark平台提交的加密完成的pyspark程序(即目标业务代码),实现spark on yarn部署模式下的业务代码加密并保证了业务代码正确可靠地运行。
69.对应的,python业务代码中的未加密代码不仅可以包括入口函数(如主函数),还可以包括计算平台函数入口代码,如spark函数入口代码,以便资源管理集群对计算平台函数入口的解析。
70.本实施例中,本发明实施例通过对待加密代码进行不可逆加密,获得加密代码,使资源管理集群可以运行加密后的目标业务代码,保证了核心业务代码的正确可靠的运行;并且整个代码加密过程不可逆,使得即便加密代码泄露也无法恢复原本python业务代码中的核心业务代码,避免了核心业务代码泄露的情况,保证了核心业务代码的安全性。
71.相应于上面的方法实施例,本发明实施例还提供了一种业务代码提交装置,下文描述的业务代码提交装置与上文描述的业务代码提交方法可相互对应参照。
72.请参考图2,图2为本发明实施例所提供的一种业务代码提交装置的结构框图。该提交装置可以包括:
73.获取单元10,用于获取计算平台的python业务代码;
74.确定单元20,用于确定python业务代码中的待加密代码;其中,待加密代码包括核心业务处理代码;
75.加密单元30,用于对待加密代码进行不可逆加密,获得加密代码;其中,加密代码与待加密代码的文件格式不同;
76.提交单元40,用于将目标业务代码提交到计算平台对应的资源管理集群中运行;其中,目标业务代码包括加密代码和python业务代码中的未加密代码。
77.可选的,确定单元20可以具体用于根据python业务代码中预设的目标文件标识,确定待加密代码;其中,目标文件标识包括加密文件标识和/或忽略文件标识。
78.可选的,加密单元30可以包括:
79.工具加密子单元,用于利用加密工具,对待加密代码进行不可逆加密,获得加密代码。
80.可选的,工具加密子单元可以具体用于利用cython加密工具,对待加密代码进行不可逆加密,获得加密代码;其中,待加密代码的文件格式为py文件格式,加密代码的文件格式为so文件格式。
81.可选的,计算平台为spark平台时,提交单元40可以具体用于利用spark命令,将目标业务代码提交到yarn集群中运行;其中,目标业务代码中的未加密代码包括入口函数和spark函数入口代码。
82.可选的,待加密代码还可以包括公共处理库代码。
83.本实施例中,本发明实施例通过加密单元30对待加密代码进行不可逆加密,获得加密代码,使资源管理集群可以运行加密后的目标业务代码,保证了核心业务代码的正确可靠的运行;并且整个代码加密过程不可逆,使得即便加密代码泄露也无法恢复原本python业务代码中的核心业务代码,避免了核心业务代码泄露的情况,保证了核心业务代码的安全性。
84.基于上述实施例,本发明实施例还提供了一种业务代码处理方法,以通过计算平台对应的资源管理集群对目标业务代码进行运行处理;下文描述的业务代码处理方法与上文描述的业务代码提交方法可相互对应参照。
85.请参考图3,图3为本发明实施例所提供的一种业务代码处理方法的流程图。该处理方法可以包括:
86.步骤201:计算平台对应的资源管理集群的驱动器节点获取客户端提交的目标业务代码;其中,目标业务代码包括计算平台的python业务代码中进行不可逆加密得到的加密代码。
87.可以理解的是,本步骤中计算平台对应的资源管理集群(如yarn集群或mesos集群)中作为驱动器节点(即driver端)的电子设备(如服务器)可以获取计算平台的客户端设备通过上述业务代码提交方法提交的目标业务代码,以对目标业务代码进行处理,实现目标业务代码的运行计算。
88.具体的,对于本步骤中作为驱动器节点的电子设备获取客户端提交的目标业务代码的具体方式,可以由设计人员自行设置,如可以采用与现有技术中资源管理集群获取计算平台的python业务代码的方法相同或相似的方式实现,本实施例对此不做任何限制。
89.步骤202:对目标业务代码进行处理,生成目标业务代码对应的任务。
90.可以理解的是,本步骤中驱动器节点可以对目标业务代码进行运行处理,生成目标业务代码对应的任务(如计算任务),从而通过任务的执行完成计算平台的python业务代码对应的业务。
91.具体的,本步骤中驱动器节点可以调用虚拟机处理目标业务代码,生成目标业务代码对应的任务。如目标业务代码中的加密代码的文件格式为so文件格式时,驱动器节点可以调用java(一门面向对象编程语言)虚拟机处理目标业务代码,生成目标业务代码对应的任务;例如资源管理集群为yarn集群时,yarn集群的驱动器节点(即driver端)可以通过py4j(一种用python和java编写的库)实现在python中调用java,即本步骤中yarn集群中的驱动器节点可以利用py4j,将接收的目标业务代码(如pyspark程序)映射到java虚拟机(jvm)中,从而利用驱动器节点中的jvm处理目标业务代码,生成目标业务代码对应的任务(task);也就是说,用户在pyspark程序中实例化一个python的sparkcontext对象,会在jvm中实例化scala(一种多范式的编程语言)的sparkcontext对象。
92.具体的,如图4所示,计算平台为spark平台时,yarn集群的driver端可以借助py4j,对接收的目标业务代码中的spark函数入口代码进行解析,将.so文件的加密代码(如核心业务处理代码和公共处理库代码)映射到java虚拟机(jvm)中处理。
93.步骤203:将任务发送到各自对应的资源管理集群的执行器节点,以利用执行器节点执行任务。
94.可以理解的是,本步骤中资源管理集群中作为驱动器节点的电子设备可以将目标业务代码对应的任务发送到资源管理集群中作为执行器节点(即executor端)的电子设备(如服务器)中,以利用执行器节点执行任务,完成计算平台的python业务代码对应的业务。
95.对应的,本实施例所提供的方法还可以包括执行器节点对接收的任务的执行过程,如执行器节点可以调用虚拟机运行driver端发送的任务;例如资源管理集群为yarn集群时,yarn集群中的执行器节点(即executor端)可以利用各自的java虚拟机运行driver端发送的任务,由于executor端所要运行的任务是由driver端发送的序列化后的字节码,里面可能含有用户定义的python函数或lambda表达式,由于py4j并不能实现在java里调用python,因此,executor端不需要借助py4j。
96.进一步的,任务包括python函数或lambda表达式时,为了能够在executor端运行用户定义的python函数或lambda表达式,执行器节点可以为每个任务创建各自对应的python进程;执行器节点中的虚拟机(如java虚拟机)可以将接收的任务中的python函数或lambda表达式发送到对应的python进程中执行;如图4所示,executor端的jvm可以在通过rpc(远程过程调用)接收driver端发送的任务后,通过socket通信方式将该任务中的python函数或lambda表达式发给启动的该任务对应的一个python进程执行,以利用为每个任务单独启动的一个python进程执行任务中的python函数或lambda表达式。相应的,如图4中的虚线所示,executor端还可以将任务的执行结果返回到driver端。
97.本实施例中,本发明实施例通过对目标业务代码进行处理,生成目标业务代码对应的任务,利用资源管理集群的驱动器节点运行加密后的目标业务代码,保证了核心业务代码的正确可靠的运行;通过将任务发送到各自对应的资源管理集群的执行器节点,利用执行器节点完成加密后的目标业务代码对应业务的处理,实现计算平台的业务处理。
98.相应于上面的方法实施例,本发明实施例还提供了一种业务代码处理装置,下文
描述的业务代码处理装置与上文描述的业务代码处理方法可相互对应参照。
99.请参考图5,图5为本发明实施例所提供的一种业务代码处理装置的结构框图。该处理装置可以包括:
100.业务获取单元50,用于作为计算平台对应的资源管理集群的驱动器节点,获取客户端提交的目标业务代码;其中,目标业务代码包括计算平台的python业务代码中进行不可逆加密得到的加密代码;
101.处理单元60,用于对目标业务代码进行处理,生成目标业务代码对应的任务;
102.发送单元70,用于将任务发送到各自对应的资源管理集群的执行器节点,以利用执行器节点执行任务。
103.可选的,加密代码的文件格式为so文件格式,且资源管理集群为yarn集群时,处理单元60可以具体用于利用py4j,调用java虚拟机处理目标业务代码,生成目标业务代码对应的任务。
104.可选的,任务包括python函数或lambda表达式时,该装置还可以包括:
105.进程创建单元,用于作为执行器节点,为接收的每个任务创建各自对应的python进程;
106.任务执行单元,用于利用执行器节点中的java虚拟机将接收的任务中的python函数或lambda表达式发送到对应的python进程中执行。
107.本实施例中,本发明实施例通过业务获取单元50对目标业务代码进行处理,生成目标业务代码对应的任务,利用资源管理集群的驱动器节点运行加密后的目标业务代码,保证了核心业务代码的正确可靠的运行;通过将任务发送到各自对应的资源管理集群的执行器节点,利用执行器节点完成加密后的目标业务代码对应业务的处理,实现计算平台的业务处理。
108.相应于上面的方法实施例,本发明实施例还提供了一种电子设备,下文描述的一种电子设备与上文描述的一种业务代码提交方法和业务代码处理方法可相互对应参照。
109.请参考图6,图6为本发明实施例所提供的一种电子设备的结构示意图。该业务代码提交设备可以包括:
110.存储器d1,用于存储计算机程序;
111.处理器d2,用于执行计算机程序时实现上述方法实施例所提供的业务代码提交方法或业务代码处理方法的步骤。
112.具体的,请参考图7,图7为本发明实施例所提供的一种电子设备的具体结构示意图,该电子设备可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(central processing units,cpu)322(例如,一个或一个以上处理器)和存储器332,一个或一个以上存储应用程序342或数据344的存储介质330(例如一个或一个以上海量存储设备)。其中,存储器332和存储介质330可以是短暂存储或持久存储。存储在存储介质330的程序可以包括一个或一个以上单元(图示没标出),每个单元可以包括对电子设备中的一系列指令操作。更进一步地,中央处理器322可以设置为与存储介质330通信,在电子设备310上执行存储介质330中的一系列指令操作。
113.电子设备310还可以包括一个或一个以上电源326,一个或一个以上有线或无线网络接口350,一个或一个以上输入输出接口358,和/或,一个或一个以上操作系统341。例如,
windows servertm,mac os xtm,unixtm,linuxtm,freebsdtm等。
114.其中,电子设备310可以具体为计算平台的客户端设备或计算平台对应的资源管理集群的服务器。
115.上文所描述的业务代码提交方法或业务代码处理方法中的步骤可以由电子设备的结构实现。
116.相应于上面的方法实施例,本发明实施例还提供了一种可读存储介质,下文描述的一种可读存储介质与上文描述的一种业务代码提交方法和业务代码处理方法可相互对应参照。
117.一种可读存储介质,可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述方法实施例的业务代码提交方法或业务代码处理方法的步骤。
118.该可读存储介质具体可以为u盘、移动硬盘、只读存储器(read

only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可存储程序代码的可读存储介质。
119.说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
120.以上对本发明所提供的一种业务代码提交方法、装置、业务代码处理方法、装置、电子设备及可读存储介质进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1