确定程序包变更信息的方法和装置与流程

文档序号:27930876发布日期:2021-12-11 12:13阅读:111来源:国知局
确定程序包变更信息的方法和装置与流程

1.本公开涉及计算机领域,尤其涉及一种确定程序包变更信息的方法和装置。


背景技术:

2.在程序开发和管理的过程中,开发人员、项目管理人员、测试人员等技术人员可以通过参考版本控制软件实现对程序代码的对比和管理。
3.技术人员可以通过参考版本控制软件,对比当前版本和参考版本的程序包的代码,确定两者之间的变更信息。进而,技术人员可以基于上述变更信息分析和管理当前版本的程序包。
4.但是,上述变更信息一般仅包括发生变动的文件和代码行数,技术人员只能了解变更文件的变更行,通过阅读繁杂的代码文件查看变更行,才能理解代码迭代后更新的具体功能,导致获知功能更新的效率较低。


技术实现要素:

5.为了解决现有技术的问题,本公开实施例提供了一种确定程序包变更信息的方法和装置。技术方案如下:根据本公开的一方面,提供了一种确定程序包变更信息的方法,所述方法包括:获取待对比的多个程序包,所述多个程序包包括目标版本的程序包和至少一个参考版本的程序包;解析每个程序包的代码文件,获取所述每个程序包对应的代码描述信息,所述代码描述信息至少包括每个类对象对应的属性信息和方法信息,所述方法信息包括指令码信息;根据所述每个程序包中每个类对象的指令码信息,构建所述每个程序包对应的多个调用链;在所述目标版本的程序包和所述至少一个参考版本的程序包之间,对比命名相同的类对象的每项代码描述信息,确定发生变更的至少一个变更项;根据所述至少一个变更项和所述多个调用链,确定所述目标版本对应的变更信息,所述变更信息至少包括所述至少一个变更项和每个变更项对应的调用链信息、功能信息。
6.根据本公开的另一方面,提供了一种确定程序包变更信息的装置,所述装置包括:获取模块,用于获取待对比的多个程序包,所述多个程序包包括目标版本的程序包和至少一个参考版本的程序包;解析模块,用于解析每个程序包的代码文件,获取所述每个程序包对应的代码描述信息,所述代码描述信息至少包括每个类对象对应的属性信息和方法信息,所述方法信息包括指令码信息;构建模块,用于根据所述每个程序包中每个类对象的指令码信息,构建所述每个
程序包对应的多个调用链;确定模块,用于在所述目标版本的程序包和所述至少一个参考版本的程序包之间,对比命名相同的类对象的每项代码描述信息,确定发生变更的至少一个变更项;根据所述至少一个变更项和所述多个调用链,确定所述目标版本对应的变更信息,所述变更信息至少包括所述至少一个变更项和每个变更项对应的调用链信息、功能信息。
7.根据本公开的另一方面,提供了一种电子设备,包括:处理器;以及存储程序的存储器,其中,所述程序包括指令,所述指令在由所述处理器执行时使所述处理器执行上述确定程序包变更信息的方法。
8.根据本公开的另一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于执行确定程序包变更信息的方法。
9.本公开提供的技术方案带来的有益效果是:在进行目标版本和参考版本比对时,可以通过解析程序包中的代码文件,并构建每个程序包对应的代码描述信息,该代码描述信息可以是结构化数据,至少包括每个类对象对应的属性信息和方法信息,其中方法信息包括指令码信息。在此结构化数据的基础上,便于遍历指令码信息构建调用链、对比命名相同的类对象的每项代码描述信息,确定发生变更的至少一个变更项,进而确定每个变更项影响的调用链信息、功能信息。相比较现有技术中通过检查代码行的方式进行版本比对,本公开的技术方案可以使技术人员更加容易的清楚版本迭代中进行的具体修改以及影响的调用链、功能,大大提高了工作效率。
附图说明
10.在下面结合附图对于示例性实施例的描述中,本公开的更多细节、特征和优点被公开,在附图中:图1示出了根据本公开示例性实施例的确定程序包变更信息的方法流程图;图2示出了根据本公开示例性实施例的代码描述信息示意图;图3示出了根据本公开示例性实施例的字节码文件示意图;图4示出了根据本公开示例性实施例的装置结构示意图;图5示出了根据本公开示例性实施例的调用链示意图;图6示出了根据本公开示例性实施例的确定程序包变更信息装置的示意性框图;图7示出了能够用于实现本公开的实施例的示例性电子设备的结构框图。
具体实施方式
11.下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
12.应当理解,本公开的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公
开的范围在此方面不受限制。
13.本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。需要注意,本公开中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
14.需要注意,本公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
15.本公开实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。
16.为了清楚描述本公开实施例提供的方法,下面对本公开涉及的技术进行介绍:war包:一种程序打包格式,属于java web(java 网页)工程,是一种与平台无关的文件格式,可将多个class(类)文件合成一个文件。
17.jar包:一种程序打包格式,属于java工程,也是一种与平台无关的文件格式,也可将多个class文件合成一个文件。
18.字节码文件:也称为class文件,通常意义下是一个包含开发程序代码的java文件。字节码文件是经过编译器预处理的一种文件,是java的执行文件存在形式,也即是说,java源程序(后缀为.java文件)要先编译成与平台无关的字节码文件(后缀为.class文件)才能执行。通常字节码文件是16进制文件,不方便直接解析,因此现有技术在对比不同版本的程序包时,一般是通过解析源代码进行对比,而不采用字节码文件。
19.java文件:开发人员编写具体java功能的代码文件。java语言中将具有相同的属性和功能的事物抽象为类,具体的事物即为对象。类是对象的载体,一个类中的具体对象也可以称为类对象。类由属性和方法两个部分组成,属性根据类对象的特征进行定义,方法根据类对象的行为进行定义。方法是包含若干执行语句的执行单元。
20.controller:通常认为是接受外部请求的开始类,程序的入口。
21.注解:一种java技术,不影响程序执行的标记方式。
22.asm:一种通用java字节码操作和分析框架,可以用于修改现有的字节码文件或动态生成字节码文件。
23.javaassist:一个用来处理 java 字节码的类库,可以用于修改现有的字节码文件或动态生成字节码文件。javaassist通常用于方法增强。
24.本公开实施例提供了一种确定程序包变更信息方法,该方法可以由终端、服务器和/或其他具备处理能力的设备完成。本公开实施例提供的方法可以由上述任一设备完成,也可以由多个设备共同完成,例如,终端可以将待对比的多个程序包发送至服务器,服务器确定程序包变更信息后,可以将变更信息返回给终端,本公开对此不作限定。
25.本实施例中以终端为例,参照图1所示的确定程序包变更信息的方法流程图,对确定程序包变更信息的方法进行介绍。
26.步骤101,终端获取待对比的多个程序包。
27.其中,上述多个程序包可以包括目标版本的程序包和至少一个参考版本的程序
包。
28.在一种可能的实施方式中,开发人员可以在终端上对java程序进行编写,得到当前版本的程序包并存储在终端中。因此,终端上可以存储有多个版本的程序包。
29.为明晰各版本程序包之间的功能变化,需要针对不同版本的程序包进行对比,此时,可以通过终端选择所要比较的不同版本的程序包,其中一个程序包作为目标版本的程序包,其余的作为参考版本的程序包。例如,当技术人员需要对比最新版本和一个历史版本的程序包之间的功能变化时,上述目标版本可以是最新版本,参考版本可以是该历史版本。本实施例对此不作限定。
30.步骤102,终端解析每个程序包的代码文件,获取每个程序包对应的代码描述信息。
31.其中,如图2所示的代码描述信息示意图,代码描述信息可以是结构化数据,至少可以包括每个类对象对应的属性信息和方法信息,其中方法信息可以包括指令码信息。
32.在一种可能的实施方式中,终端可以使用解析工具对程序包的代码文件进行解析,以获取上述类对象对应的属性信息和方法信息,以及方法信息中的指令码信息。进而,终端可以基于上述信息对代码描述信息进行构建,得到结构化的代码描述信息。
33.可选的,终端所使用的解析工具可以是javaassist,解析的代码文件可以是字节码文件,字节码文件如图3所示。此时,上述步骤102的处理可以如下:读取每个程序包指定目录下的字节码文件;解析读取的字节码文件,获取每个程序包对应的代码描述信息。
34.在一种可能的实施方式中,字节码文件可以存储在程序包的指定目录下。终端可以访问该指定目录,并获取相应的字节码文件。进而,终端可以调用javaassist读取16进制的字节码文件,遍历其中的字节码信息,将其抽象化为包含方法、属性的类对象,也即是得到上述结构化的代码描述信息。
35.本实施例对具体的解析工具不作限定,例如,解析工具还可以是asm等。
36.步骤103,终端根据每个程序包中每个类对象的指令码信息,构建每个程序包对应的多个调用链。
37.其中,指令码信息可以包括具体的操作信息,操作信息可以用于指示如何构建程序包对应的调用链。操作信息可以包括方法调用指令、属性调用指令等。方法调用指令包括但不限于invokestatic,invokespecial,invokevitual,invokeinterface,invokedynamic;属性调用信息包括但不限于getfield,getstatic,new,putstatic,getstatic。
38.在一种可能的实施方式中,终端可以在每个程序包中,遍历每个方法信息具体的指令码信息中的方法调用指令和/或属性调用指令,确定具体的调用关系,进而,基于确定调用关系构建相应的调用链。
39.步骤104,终端在目标版本的程序包和至少一个参考版本的程序包之间,对比命名相同的类对象的每项代码描述信息,确定发生变更的至少一个变更项。
40.在一种可能的实施方式中,终端可以获取解析后的不同版本程序包中的相同名称的类对象,读取该类对象的每项代码描述信息进行比较。进一步地,标记有变化的代码描述信息作为变更项,记录上述变更项。举例来说,通过变更项可以获知针对字节码文件进行了
哪些修改,例如对某个方法、属性进行了增删改等。
41.步骤105,终端根据至少一个变更项和多个调用链,确定目标版本对应的变更信息。
42.其中,变更信息至少可以包括上述至少一个变更项和每个变更项对应的调用链信息、功能信息。该变更信息可以是指目标版本相对于至少一个参考版本的变更。
43.在一种可能的实施方式中,终端在确定下变更项后,可以在调用链中查找该变更项影响的调用链以及相应的功能,进而,终端可以对变更项、调用链信息、功能信息进行整合,生成对应的变更信息。
44.下面分别对确定调用链信息和功能信息的具体过程进行介绍。
45.首先,确定调用链信息的具体过程可以如下:获取至少一个变更项对应的目标方法信息;在每个程序包对应的多个调用链中,获取包含目标方法信息的至少一个目标调用链;根据至少一个目标调用链,确定每个变更项对应的调用链信息。
46.在一种可能的实施方式中,由于变更项可以包括方法或属性,终端可以在每个程序包的代码描述信息中获取包含变更项的方法信息,为了便于介绍,将获取的方法信息称为目标方法信息。
47.然后,终端可以遍历上述步骤103中得到的多个调用链中的方法信息,每当查询到目标方法信息时,可以记录对应的调用链。遍历结束后,终端可以对记录的调用链获取对应的调用链信息。该调用链信息也即是指变更项所影响的调用链。为了便于介绍,将变更项影响的调用链称为目标调用链。
48.可选的,变更项可能影响多条调用链,可以将最长最完整的调用链作为受影响的链路,相对应的处理如下:当一个变更项存在一个目标调用链时,将目标调用链的调用链信息,作为对应的变更项的调用链信息;当一个变更项存在多个目标调用链时,将节点数量最多的目标调用链的调用链信息,作为对应的变更项的调用链信息。
49.举例来说,如果开发人员对某个目标方法进行了增删改等某一项操作,其对应的变更项存在的调用链为两个,如图4所示,其中调用链1包含n个节点,调用链2包含m个结点,其中n>m,则此时将调用链1的调用链信息作为对应的变更项的调用信息。
50.其次,对于功能信息,由于调用链可以包括多个节点,该节点可以为类对象的方法信息,本实施例提供两种可能的实施方式,基于调用链的入口节点来确定变更项所影响的功能信息。
51.在第一种可能的实施方式中,调用链的入口节点的名称中包括第一字符串,此时,确定功能信息的处理可以为:在至少一个变更项对应的每个目标调用链中,根据入口节点的方法信息,确定每个变更项对应的功能信息。在这种实施方式下,无需对入口节点提前标记,可以扩展适用范围。
52.举例来说,当第一字符串为controller时,表示代码文件是以文件名为controller结尾的字节码文件,可以约定该字符串用于表示处理具体程序功能开端,当调
用链的入口结点的名称包含该字符串时,可以获知具体变更的功能是表示处理具体程序功能开端的功能。本实施例对具体的第一字符串不作限定。
53.在第二种可能的实施方式中,可以提前对入口节点添加注解信息,调用链的入口节点的注解信息中包括第二字符串,此时,确定功能信息的处理可以为:在至少一个变更项对应的每个目标调用链中,获取入口节点的注解信息中标记的功能信息,作为每个变更项对应的功能信息。其中,注解信息可以包括功能信息,可选的,还可以包括功能信息对应的重要程度。在这种实施方式下,支持使用特定的注解信息对入口节点进行自定义,可以提高标记入口节点的灵活性。
54.举例来说,当第二字符串为@mark时,表示通过增加特定的注解@mark(desc=“功能”,rank=“1”,其中,desc表示功能点,rank标记此方法的重要程度,默认0为重要,1为次要。)来标记调用链的入口节点,在程序包进行比较时,若解析到的方法信息包含有@mark的字节码时,会把该方法当作调用链的最开始段,相应地,展示相关的重要程度以及注解内标记的具体功能。本实施例对具体的第二字符串不作限定。
55.如图5所示的变更信息示意图,终端在步骤105生成变更信息之后,还可以基于预设的展示模板,展示相应的变更信息。可选的,终端在展示变更项的同时,还可以展示功能信息对应的重要程度。该重要程度可以由技术人员预先进行设置,也可以根据功能的历史使用信息进行确定,例如,历史使用信息可以是使用次数,使用次数越多,重要程度越高。本实施例对此不作限定。
56.本公开实施例中,在进行当前版本和参考版本比对时,可以通过解析程序包中的字节码,并构建每个程序包对应的一个或多个调用链,在程序包之间进行相同类对象的比对,确定变更项,并根据调用链和变更项来确定版本之间的变更信息,并指示变更信息所对应的具体功能是哪些。相比较现有技术中通过检查代码行的方式进行版本比对,本公开的技术方案可以使技术人员更加容易的清楚版本迭代中进行的具体修改以及影响的调用链、功能,大大提高了工作效率。
57.本公开实施例提供了一种确定程序包变更信息的装置,该装置用于实现上述确定程序包变更信息的方法。如图6所示的确定程序包变更信息装置的示意性框图,该装置600包括:获取模块601,解析模块602,构建模块603,确定模块604。
58.获取模块601,用于获取待对比的多个程序包,所述多个程序包包括目标版本的程序包和至少一个参考版本的程序包;解析模块602,用于解析每个程序包的代码文件,获取所述每个程序包对应的代码描述信息,所述代码描述信息至少包括每个类对象对应的属性信息和方法信息,所述方法信息包括指令码信息;构建模块603,用于根据所述每个程序包中每个类对象的指令码信息,构建所述每个程序包对应的多个调用链;确定模块604,用于在所述目标版本的程序包和所述至少一个参考版本的程序包之间,对比命名相同的类对象的每项代码描述信息,确定发生变更的至少一个变更项;根据所述至少一个变更项和所述多个调用链,确定所述目标版本对应的变更信息,所述变更信息至少包括所述至少一个变更项和每个变更项对应的调用链信息、功能信息。
59.可选的,所述解析模块602用于:
读取每个程序包指定目录下的字节码文件;解析读取的字节码文件,获取所述每个程序包对应的代码描述信息。
60.可选的,所述确定模块604用于:获取所述至少一个变更项对应的目标方法信息;在所述每个程序包对应的多个调用链中,获取包含所述目标方法信息的至少一个目标调用链;根据所述至少一个目标调用链,确定每个变更项对应的调用链信息。
61.可选的,所述确定模块604用于:当一个变更项存在一个目标调用链时,将所述目标调用链的调用链信息,作为对应的变更项的调用链信息;当一个变更项存在多个目标调用链时,将节点数量最多的目标调用链的调用链信息,作为对应的变更项的调用链信息。
62.可选的,所述调用链包括多个节点,所述节点为类对象的方法信息,所述调用链的入口节点的名称中包括第一字符串;所述确定模块604用于:在所述至少一个变更项对应的每个目标调用链中,根据入口节点的方法信息,确定每个变更项对应的功能信息。
63.可选的,所述调用链包括多个节点,所述节点为类对象的方法信息,所述调用链的入口节点的注解信息中包括第二字符串;所述确定模块604用于:在所述至少一个变更项对应的每个目标调用链中,获取入口节点的注解信息中标记的功能信息,作为每个变更项对应的功能信息。
64.可选的,所述构建模块603用于:在每个程序包中,遍历每个类对象的指令码信息,确定每个类对象之间的调用关系;根据所述调用关系,构建每个程序包对应的多个调用链。
65.本公开实施例中,在进行目标版本和参考版本比对时,可以通过解析程序包中的代码文件,并构建每个程序包对应的代码描述信息,该代码描述信息可以是结构化数据,至少包括每个类对象对应的属性信息和方法信息,其中方法信息包括指令码信息。在此结构化数据的基础上,便于遍历指令码信息构建调用链、对比命名相同的类对象的每项代码描述信息,确定发生变更的至少一个变更项,进而确定每个变更项影响的调用链信息、功能信息。相比较现有技术中通过检查代码行的方式进行版本比对,本公开的技术方案可以使技术人员更加容易的清楚版本迭代中进行的具体修改以及影响的调用链、功能,大大提高了工作效率。
66.本公开示例性实施例还提供一种电子设备,包括:至少一个处理器;以及与至少一个处理器通信连接的存储器。所述存储器存储有能够被所述至少一个处理器执行的计算机程序,所述计算机程序在被所述至少一个处理器执行时用于使所述电子设备执行根据本公开实施例的方法。
67.本公开示例性实施例还提供一种存储有计算机程序的非瞬时计算机可读存储介
质,其中,所述计算机程序在被计算机的处理器执行时用于使所述计算机执行根据本公开实施例的方法。
68.参考图7,现将描述可以作为本公开的服务器或客户端的电子设备700的结构框图,其是可以应用于本公开的各方面的硬件设备的示例。电子设备旨在表示各种形式的数字电子的计算机设备,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
69.如图7所示,电子设备700包括计算单元701,其可以根据存储在只读存储器(rom)702中的计算机程序或者从存储单元708加载到随机访问存储器(ram)703中的计算机程序,来执行各种适当的动作和处理。在ram 703中,还可存储设备700操作所需的各种程序和数据。计算单元701、rom 702以及ram 703通过总线704彼此相连。输入/输出(i/o)接口705也连接至总线704。
70.电子设备700中的多个部件连接至i/o接口705,包括:输入单元706、输出单元707、存储单元708以及通信单元709。输入单元706可以是能向电子设备700输入信息的任何类型的设备,输入单元706可以接收输入的数字或字符信息,以及产生与电子设备的用户设置和/或功能控制有关的键信号输入。输出单元707可以是能呈现信息的任何类型的设备,并且可以包括但不限于显示器、扬声器、视频/音频输出终端、振动器和/或打印机。存储单元708可以包括但不限于磁盘、光盘。通信单元709允许电子设备700通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据,并且可以包括但不限于调制解调器、网卡、红外通信设备、无线通信收发机和/或芯片组,例如蓝牙设备、wifi设备、wimax设备、蜂窝通信设备和/或类似物。
71.计算单元701可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元701的一些示例包括但不限于中央处理单元(cpu)、图形处理单元(gpu)、各种专用的人工智能(ai)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(dsp)、以及任何适当的处理器、控制器、微控制器等。计算单元701执行上文所描述的各个方法和处理。例如,在一些实施例中,确定程序包变更信息的方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元708。在一些实施例中,计算机程序的部分或者全部可以经由rom 702和/或通信单元709而被载入和/或安装到电子设备700上。在一些实施例中,计算单元701可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行确定程序包变更信息的方法。
72.用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
73.在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可
读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd

rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
74.如本公开使用的,术语“机器可读介质”和“计算机可读介质”指的是用于将机器指令和/或数据提供给可编程处理器的任何计算机程序产品、设备、和/或装置(例如,磁盘、光盘、存储器、可编程逻辑装置(pld)),包括,接收作为机器可读信号的机器指令的机器可读介质。术语“机器可读信号”指的是用于将机器指令和/或数据提供给可编程处理器的任何信号。
75.为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,crt(阴极射线管)或者lcd(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
76.可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(lan)、广域网(wan)和互联网。
77.计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端

服务器关系的计算机程序来产生客户端和服务器的关系。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1