
1.本申请涉及软件领域,尤其涉及一种代码管理方法、装置、设备及存储介质。
背景技术:2.开发人员在需求开发或程序漏洞(bug)解决的过程中,可能会引入一些有风险的代码,例如,需要使用一个新的框架时,但这个框架还不太成熟,该框架上线之后就可能造成线上故障。
3.目前,为了降低故障风险,对实现一项功能的代码集合中,配置用于指示该代码集合是否能够被执行的状态值,以及根据该状态值进行逻辑切换的兜底逻辑。上述中的状态值实质上是实现虚拟开关功能的代码,该状态值包括开启值和关闭值,当状态值为开启值时,状态值所在的代码集合能够正常运行;当状态值为关闭值时,状态值所在的代码集合不能正常运行,需要通过兜底逻辑进行逻辑切换到其他代码集合。例如,2.0版本的视频播放软件的声音播放功能出现了故障,将开发人员申请的状态值进行修改,切换到1.0版本下声音播放功能对应的逻辑代码,以保证该视频播放软件能够正常使用。
4.现有技术中当客户端执行代码集合的过程中出现故障后,需要技术人员人工分析故障信息包含的内容,根据该内容进行人工操作后才能生成对应的关闭值,并需要人工辨别需要配置的代码集合,将生成的关闭值配置到该代码集合。这种方式需要占用大量的人力资源,同时要求技术人员的具有较高的技能水平,且人为处理过程消耗的时间较长,导致开发过程的整体效率低下。
技术实现要素:5.本申请提供了一种代码管理方法、装置、设备及存储介质,用以解决程序开发过程中代码集合的状态值需要人工申请,造成开发人员使用状态值难度较大的问题。
6.第一方面,本申请实施例提供了一种代码管理方法,应用于服务器,包括:接收客户端传输的目标代码集合执行过程中的故障信息,所述故障信息包括所述目标代码集合的唯一标识;当所述目标代码集合的当前状态值为开启值时,根据所述故障信息中的所述唯一标识,获取所述目标代码集合对应的关闭值,其中,所述开启值用于指示所述目标代码集合可被执行,所述关闭值用于指示所述目标代码集合不可被执行;向所述客户端发送状态值指示消息,所述状态值指示消息用于指示所述客户端将所述目标代码集合的当前状态值修改为所述关闭值。
7.第二方面,本申请实施例提供了一种代码管理方法,应用于客户端,包括:当目标代码集合在执行过程中出现故障后,生成所述目标代码集合的故障信息,其中,所述故障信息包括所述目标代码集合的唯一标识,所述目标代码集合的当前状态值为开启值;向服务器发送所述故障信息,其中,所述故障信息用于获取所述目标代码集合对应的关闭值;接收所述服务器发送的状态值指示消息;根据所述状态值指示消息,将所述目标代码集合的当前状态值修改为所述关闭值。
8.第三方面,本申请实施例提供了一种代码管理的服务器装置,包括:第一接收模块,用于接收客户端传输的目标代码集合执行过程中的故障信息,所述故障信息包括所述目标代码集合的唯一标识;处理模块,用于当所述目标代码集合的当前状态值为开启值时,根据所述故障信息中的所述唯一标识,获取所述目标代码集合对应的关闭值,其中,所述开启值用于指示所述目标代码集合可被执行,所述关闭值用于指示所述目标代码集合不可被执行;第一发送模块,用于向所述客户端发送状态值指示消息,所述状态值指示消息用于指示所述客户端将所述目标代码集合的当前状态值修改为所述关闭值。
9.第四方面,本申请实施例提供了一种代码管理的客户端装置,包括:生成模块,用于当目标代码集合在执行过程中出现故障后,生成所述目标代码集合的故障信息,其中,所述故障信息包括所述目标代码集合的唯一标识,所述目标代码集合的当前状态值为开启值;第二发送模块,用于向服务器发送所述故障信息,其中,所述故障信息用于获取所述目标代码集合对应的关闭值;第二接收模块,用于接收所述服务器发送的状态值指示消息;修改模块,用于根据所述状态值指示消息,将所述目标代码集合的当前状态值修改为所述关闭值。
10.第五方面,本申请实施例提供了一种电子设备,包括:处理器、通信接口、存储器和通信总线,其中,处理器、通信接口和存储器通过通信总线完成相互间的通信;所述存储器,用于存储计算机程序;所述处理器,用于执行所述存储器中所存储的程序,实现第一方面所述的代码管理方法;或者,执行所述存储器中所存储的程序,实现第二方面所述的代码管理方法。
11.第六方面,本申请实施例提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现第一方面所述的代码管理方法;或者,所述计算机程序被处理器执行时实现第二方面所述的代码管理方法。
12.本申请实施例提供的上述技术方案与现有技术相比具有如下优点:本申请实施例提供的该方法,服务器接收到客户传输的目标代码集合执行过程中的故障信息后,当目标代码集合的当前状态值为开启值时,则根据故障信息中的目标代码集合的唯一标识,获取所述目标代码集合对应的关闭值;然后,服务器向客户端发送状态值指示消息,通过状态值指示消息指示客户端将目标代码集合的当前状态值修改为关闭值,其中,开启值用于指示目标代码集合可被执行,关闭值用于指示目标代码集合不可被执行。如此,客户端执行目标代码集合的过程中,出现故障后,自动将故障信息传输给服务器。服务器接收该故障信息后,自动根据该故障信息中的唯一标识,生成目标代码集合对应的关闭值,并通过状态值指示消息,将客户端中目标代码集合的状态值修改为关闭值。该过程实现了目标代码集合对应状态值的自动化管理,不再需要现有技术中的人工分析故障信息、人工辨别需要配置的代码集合以及关闭值的人工配置。本方法降低开发人员使用状态值的难度,提高开发过程的整体效率。
13.上述过程中,服务器接收客户端传输的故障信息后,能够自动识别故障信息中包含的目标代码集合的唯一标识,然后根据该唯一标识,自动获取目标代码集合对应的关闭值,并通过状态值指示消息将该客户端中目标代码集合的当前状态值修改为关闭值。服务器自动化处理过程,避免目标代码集合出现故障后,客户端仍旧在一段时间内执行该目标代码集合,从而大面积影响使用客户端的用户,降低用户的使用体验。同时,相对于技术人
员人为分析故障信息,人工操作后生成关闭值的过程,以及人工辨别需要配置的代码集合,将生成的关闭值配置到该代码集合的过程,本方法实现了自动化管理过程,不再需要人工分析和配置,节省了大量人力资源,避免了人工处理可能会出现的主观性错误,且处理速度更加迅速,提高了开发过程的整体效率。
附图说明
14.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
15.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
16.图1为本申请实施例中提供的服务器为执行主体时的代码管理方法流程步骤示意图;
17.图2为本申请实施例中提供的代码集合请求过程的流程步骤示意图;
18.图3为本申请实施例中提供的客户端为执行主体时的代码管理方法流程步骤示意图;
19.图4为本申请实施例中提供的对代码的状态值进行配置时的流程步骤示意图;
20.图5为本申请实施例中提供的一种代码管理方法详细实施过程的步骤示意图;
21.图6为本申请实施例中提供的代码管理的服务器装置结构示意图;
22.图7为本申请实施例中提供的代码管理的客户端装置结构示意图;
23.图8为本申请实施例中提供的电子设备结构示意图。
具体实施方式
24.为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
25.本申请实施例中提供的代码管理方法,服务器对客户端传输的故障信息进行处理,通过故障信息中的唯一标识,实现目标代码集合当前状态值的修改。该过程通过服务器和客户端的相互配合实现。客户端可以实现在多种类型的终端设备上,例如,智能手机、平板电脑、笔记本电脑等,本申请的保护范围不以客户端所在终端设备的具体类型为限制。服务器可以为多种类型的服务器,例如,云服务器、企业本地服务器等,本申请的保护范围不以服务器的具体类型为限制。下面的实施例中,分别将服务器和客户端作为执行主体,对本方法的实现过程进行介绍。
26.以下实施例中,以服务器作为执行主体对代码管理方法进行介绍。
27.一个实施例中,如图1所示,代码管理方法主要包括以下步骤:
28.步骤101,服务器接收客户端传输的目标代码集合执行过程中的故障信息,其中,故障信息包括目标代码集合的唯一标识。
29.本实施例中,目标代码集合指的是在客户端执行的一段代码,该目标代码集合可
以为实现同一个功能的基础代码集合,例如,实现视频应用程序(application,简称app)的弹幕功能的基础代码集合;还可以为实现一个以上关联性功能的基础代码集合,例如,实现视频app弹幕功能和快进功能的基础代码集合。本申请的保护范围不以目标代码集合包含的具体代码和实现的功能为限制。
30.目标代码集合在客户端执行过程中,可能因为例如编译错误等原因,造成目标代码集合在执行过程中出现故障,客户端出现故障后,会生成对应的故障信息,并将该故障信息传输给服务器。该故障信息包含了出现故障的目标代码集合的唯一标识。而目标代码集合的唯一标识,指的是能够唯一代表目标代码集合的标识,只要可以唯一代表目标代码集合,唯一标识可以为任何一种格式的标识。本申请的保护范围不以唯一标识的具体实现形式为限制。
31.一个具体的实施例中,服务器与项目开发平台关联,项目开发平台是技术人员进行项目开发的基础平台,技术人员可以将开发的项目需求,发布至服务器,例如,上述中的视频app为一个项目,该项目中的一个项目需求为实现视频app弹幕功能,则目标代码集合对应该项目需求。服务器也可以将该项目运行的相关信息,例如,运行过程中的漏洞(bug),反馈给项目开发平台。项目开发平台中的每一个项目、同一个项目中的每一个项目需求,以及项目运行中出现的每一个bug,均有对应的编号。
32.服务器可以从项目开发平台获取项目的编号、项目需求的编号以及bug的编号。一个项目的编号能够唯一代表该项目对应的代码集合;同一个项目中的一个项目需求的编号,能够唯一代表该项目需求在项目中对应的代码集合;一个bug的编号能够唯一代表该bug所在的代码集合。目标代码集合的唯一标识,可以为项目的编号、项目需求的编号以及bug的编号中的任意一个,例如,将一个项目需求的编号作为该项目需求对应代码集合的唯一标识。目标代码集合的唯一标识,也可以在项目的编号、项目需求的编号以及bug的编号中任意选定两个或两个以上,重新拼接后形成的新的编号作为唯一标识,例如,项目的编号和项目需求的编号拼接生成的新的唯一编号,或者,项目的编号和bug的编号拼接生成的新的唯一编号。目标代码集合在被传输时,一直携带该唯一标识。当目标代码集合在客户端执行过程中出现故障后,则客户端将携带有唯一标识的故障信息传输给服务器。
33.本实施例中,依托于项目开发平台获得目标代码集合的唯一标识,能够方便快捷地获取到唯一标识,并且更容易通过项目开发平台对代码集合的唯一标识进行管理。
34.一个具体的实施例中,目标代码集合的唯一标识可以为根据需要和实际情况预先设定的编号,例如,一个项目中包含三个代码集合,分别命名为001、002和003,当目标代码集合是名称为001的代码集合时,该目标代码集合的唯一标识为001;或者,一个项目命名为项目a,三个代码集合分别命名为a01、a02和a03,当目标代码集合是名称为a01的代码集合时,该目标代码集合的唯一标识为a01。预先设定唯一标识时,包括但不限于使用数字、字母或其组合等,本申请的保护范围不以目标代码集合的唯一标识的设定原则和形式为限制。
35.预先设定的唯一标识,预先设定后保存在存储器中,该存储器可以为服务器本地的存储器,也可以为能够与服务器进行数据传输的其他存储空间,例如,云存储器、上述实施例中项目开发平台的存储空间等。目标代码集合和对应的唯一标识是对应保存的,当服务器需要时,能够从存储器中读取预先设定的、与目标代码集合对应的唯一标识。本申请的保护范围不以预先设定的唯一标识的存储形式和存储位置为限制。
36.本实施例中,根据需要和实际情况预先设定唯一标识,提高用户设定唯一标识的自由度,使唯一标识的设定更加灵活。
37.步骤102,当目标代码集合的当前状态值为开启值时,服务器根据故障信息中的唯一标识,获取目标代码集合对应的关闭值,其中,开启值用于指示目标代码集合可被执行,关闭值用于指示目标代码集合不可被执行。
38.本实施例中,目标代码集合的当前状态值与目标代码集合的唯一标识对应保存在服务器本地的存储器,或者对应保存在能够与服务器进行数据传输的其他存储空间中,例如,可以保存在上述实施例中的项目开发平台的存储空间中。当服务器需要目标代码集合的当前状态值时,可以通过唯一标识,从存储空间中读取该目标代码集合的当前状态值。该当前状态值为指示目标代码集合可执行状态的代码。目标代码集合的当前状态值可以为开启值或关闭值。若当前状态值配置为开启值时,则表示目标代码集合处于可以被执行的状态;若当前状态值配置为关闭值时,则表示目标代码集合处于不可以被执行的状态。
39.服务器接收到客户端传输的故障信息,若目标代码集合的当前状态值为开启值时,则需要根据目标代码集合的唯一标识,获取目标代码集合对应的关闭值,以通过该关闭值指示该目标代码集合不可被执行。关闭值的获取过程,是服务器通过目标代码集合的唯一标识自动完成的,并不需要人为进行处理或者配置。自动获取关闭值的过程,避免人工处理造成的人力资源浪费,且自动获取关闭值的过程比人工配置更加迅速和精确,提高了获取关闭值过程的效率。
40.步骤103,服务器向客户端发送状态值指示消息,状态值指示消息用于指示客户端将目标代码集合的当前状态值修改为关闭值。
41.本实施例中,当目标代码集合的当前状态值为开启值时,服务器获取关闭值之后,生成状态值指示消息,该状态值指示消息中携带有关闭值。服务器将携带有关闭值的状态值指示消息发送给客户端。客户端则根据该状态值指示消息将目标代码集合的当前状态值修改为关闭值,如此,客户端不会再执行该目标代码集合,也就避免了运行故障代码导致的线上故障。
42.本实施例中,服务器发送状态值指示消息给客户端时,可以根据需要和实际情况,预先设定接收状态值指示消息的具体客户端。例如,服务器可以将状态值指示消息发送给出现故障的客户端,修改该出现故障的客户端中的目标代码集合的当前状态值为关闭值,如此,可以精准的指示出现故障的客户端不再执行目标代码集合,避免出现其他客户端中的目标代码集合运行正常,却需要停止执行目标代码集合的情况。
43.又例如,服务器可以将状态值指示消息发送给所有请求过目标代码集合的客户端,每一个客户端接收到该状态值指示消息后,均停止执行客户端本地的目标代码集合。如此,当一个客户端中目标代码集合执行过程中出现故障后,请求过目标代码集合的每一个客户端,均停止执行该目标代码集合的执行,能够避免出现不同的客户端重复出现故障的情况。
44.又例如,当一个客户端在执行目标代码集合的过程中出现故障后,服务器将状态值指示消息发送给该出现故障的客户端;当另一个客户端在执行目标代码集合的过程中出现故障后,服务器则再次将状态值指示消息发送给该出现故障的客户端。服务器在传输状态值指示消息同时,统计停止执行该目标代码集合的客户端的数量,当停止执行目标代码
集合的客户端的数量达到一个预设阈值时,表明该目标代码集合执行不稳定,容易出现执行故障,此时,服务器将状态值指示消息发送给所有请求过目标代码集合的客户端,停止所有客户端执行该目标代码集合,避免更多的客户端在执行目标代码集合时出现故障。
45.又例如,服务器接收到客户端传输的故障信息后,可以先对故障信息进行分析,若分析结果表明,该客户端出现的故障不会在大多数客户端出现,比如,该故障是由于客户端的播放器问题造成的,则该故障出现在其他客户端上的可能性小,则服务器将状态值指示消息只发送给出现该故障的客户端。若分析故障信息的结果表明,该故障会出现在其他客户端上,比如,该故障是由于目标代码集合本身存在的bug造成的,则该故障会出现在其他客户端上,则服务器将状态值指示消息发送给所有请求过目标代码集合的客户端。根据故障信息的分析结果,确定发送状态值指示消息的客户端,使状态值指示消息的发送更有针对性,发送方式更加灵活,既可以避免停止全部客户端执行目标代码集合,出现的代码资源浪费,又可以避免目标代码集合在多个客户端重复出现故障的情况。
46.一个实施例中,服务器接收客户端传输的故障信息后,服务器会根据故障信息中的唯一标识,获取目标代码集合对应的关闭值。关闭值根据唯一标识获取时,有两种方式:
47.一种是服务器在预设的存储器中,获取唯一标识对应的关闭值,其中,关闭值是基于唯一标识预先生成的。
48.目标代码集合的唯一标识可以预先获得,获得该唯一标识后,根据该唯一标识生成关闭值,并将该关闭值和唯一标识对应保存至预设的存储器中。另外,在根据唯一标识生成关闭值的同时,可以生成目标代码集合对应的开启值,将唯一标识作为键(key),将开启值和/或关闭值作为值(value),以键值对的形式,将目标代码集合的唯一标识、开启值和关闭值提前保存在预设的存储器中。
49.预设的存储器中保存着至少一个唯一标识,以及唯一标识对应的开启值和关闭值。当需要开启值或关闭值时,可以从预设的存储器中直接读取获得。
50.需要说明的是,预设的存储器可以为服务器本地的存储器,也可以为能够与服务器进行交互的其他存储器,例如,预设的硬盘、云存储器等。本申请的保护范围不以预设存储器的具体实现位置和形式为限制。
51.根据唯一标识预先生成关闭值,将生成的关闭值保存在预设存储器中的方式,当服务器需要关闭值时,只需要从预设存储器中获取即可,获取过程便捷、易实现,且获取过程更稳定。
52.另一种是服务器基于唯一标识,生成目标代码集合对应的关闭值。
53.就是说,当服务器接收到故障信息后,根据故障信息中的唯一标识,在当下实时生成目标代码集合对应的关闭值。生成过程的具体规则可以为预先设定的。该规则设定的具体内容或者设定形式,可以根据需要和实际情况实现,本申请的保护范围不以关闭值生成规则的具体实现形式和设定方式为限制。
54.例如,关闭值生成规则通过预先设定一段可执行的关闭值生成代码来实现,当需要生成关闭值时,调用该预设的关闭值生成代码,该关闭值生成代码根据唯一标识,自动执行后生成目标代码集合对应的关闭值。
55.又例如,关闭值生成规则可以为在唯一标识后添加预设的指示关闭的符号,比如,当目标代码集合的唯一标识为001,指示关闭的符号为c,则根据规则在001后添加c,得到的
001c即为唯一标识001对应的关闭值。
56.又例如,关闭值生成规则可以是对唯一标识进行运算后得到的结果,比如,当目标代码集合的唯一标识为123,将123每一位上的数字相加,得到的结果6即为唯一标识123对应的关闭值。运算的方法不限于加减乘除运算,以及其他自定义的运算算法。
57.又例如,关闭值生成规则还可以通过预先训练好的关闭值生成模型实现,比如训练好的卷积神经网络模型等,将唯一标识输入到该训练好的模型中,将模型输出的结果作为唯一标识对应的关闭值。
58.另外,还可以预先设定开启值生成规则,用于在需要开启值时,根据该开启值生成规则,根据唯一标识,生成目标代码集合对应的开启值。开启值生成规则的实现形式可以采用与上述关闭值生成规则类同的方式,例如开启值生成代码、在唯一标识后添加预设的指示开启的符号、对唯一标识进行运算以及开启值生成模型等,此处不再赘述。
59.通过唯一标识当下生成的过程,使关闭值的获取过程更加灵活,并且不需要预先存储关闭值,避免了存储关闭值额外占用存储空间,节省了存储资源。
60.一个实施例中,服务器接收客户端传输的故障信息后,服务器会根据故障信息中的唯一标识,获取目标代码集合对应的关闭值,具体的,服务器会根据唯一标识和故障信息,生成能够指示故障信息的关闭值。故障信息包括但不限于故障类型和/或故障编号,也就是说,故障信息可以为故障类型,也可以为故障编号,还可以为故障类型和故障编号的组合,或者其他类别的故障信息或信息组合。根据唯一标识和故障信息,生成关闭值的过程也有两种方式:
61.一种是服务器在预设的存储器中,获取与唯一标识对应,且与故障信息对应的关闭值,其中,关闭值是基于唯一标识和故障信息生成的。
62.目标代码集合的唯一标识可以预先获得,同时故障信息也可以根据经验和实际情况预先获得。服务器获得唯一标识和故障信息后,对于每一个唯一标识作以下处理:针对每一类故障信息,生成对应的关闭值,并将该关闭值保存至预设的存储器中。另外,服务器在根据唯一标识生成关闭值的同时,可以生成目标代码集合对应的开启值,将唯一标识作为一级键(key),将故障信息作为二级键,将开启值和/或关闭值作为值(value),以键值对的形式,将目标代码集合的唯一标识、故障信息以及开启值和/或关闭值提前保存在预设的存储器中。
63.预设的存储器中保存着至少一个唯一标识、一类故障信息以及与唯一标识和故障信息对应的开启值和关闭值。当需要开启值或关闭值时,服务器可以从预设的存储器中直接读取获得。
64.需要说明的是,预设的存储器可以为服务器本地的存储器,也可以为能够与服务器进行交互的其他存储器,例如,预设的硬盘、云存储器等。本申请的保护范围不以预设存储器的具体实现位置和形式为限制。
65.另一种是服务器基于唯一标识和故障信息,生成目标代码集合对应的关闭值。
66.就是说,当服务器接收到故障信息后,根据故障信息和唯一标识,在当下实时生成目标代码集合对应的关闭值。生成过程的具体规则可以为预先设定的。该规则设定的具体内容或者设定形式,可以根据需要和实际情况实现,本申请的保护范围不以关闭值生成规则的具体实现形式和设定方式为限制。
67.例如,关闭值生成规则通过预先设定一段可执行的关闭值生成代码来实现,当需要生成关闭值时,调用该预设的关闭值生成代码,该关闭值生成代码根据唯一标识和故障信息,自动执行后生成目标代码集合对应的关闭值。
68.又例如,关闭值生成规则可以在唯一标识后添加预设的指示关闭的符号和指示故障信息的符号,比如,当目标代码集合的唯一标识为001,指示关闭的符号为c,指示故障信息的符号为d,则根据规则在001后添加c和d,得到的001cd即为目标代码集合对应的关闭值。
69.又例如,关闭值生成规则可以是根据故障信息确定运算方法后,对唯一标识进行运算后得到的结果,比如,当目标代码集合的唯一标识为123,根据故障信息确定运算方法为加法,将123每一位上的数字相加,得到的结果6即为目标代码集合对应的关闭值。运算的方法不限于加减乘除运算,以及其他自定义的运算算法。
70.又例如,关闭值生成规则还可以通过预先训练好的关闭值生成模型实现,比如训练好的卷积神经网络模型等,将唯一标识和故障信息输入到该训练好的模型中,将模型输出的结果作为目标代码集合对应的关闭值。
71.本实施例中,通过唯一标识和故障信息获取关闭值,使关闭值与故障信息相关,更好的指示该关闭值针对的故障,可以用于后续的故障统计及故障排查等过程。例如上述实施例中,通过统计故障数量是否大于预设阈值,来确定状态值指示消息需要发送的客户端的过程中,通过关闭值中包含的故障信息来统计故障数量,以更好的确定需要修改当前状态值的客户端,提高代码管理的效率。
72.一个实施例中,服务器若在目标代码集合的完成执行过程中,均未接收到目标代码集合相关的故障信息,服务器确定目标代码集合相关联的历史代码集合,其中,历史代码集合为目标代码集合的全部历史版本对应的代码集合,或部分历史版本对应的代码集合;服务器删除历史代码集合。
73.服务器在目标代码集合完成执行的过程中,一直没有接收到客户端发送的故障信息,则表明该目标代码集合在客户端执行的过程中没有问题。
74.服务器中保存有目标代码集合,以及历史代码集合,历史代码集合指的是目标代码集合的全部历史版本对应的代码集合。服务器删除保存的历史代码集合,可以释放更多的存储空间,避免冗余代码占用存储资源,浪费存储空间。
75.删除历史代码集合时,可以将全部历史版本对应的代码集合全部删除,例如,目标代码集合指的是3.0版本下的代码集合,历史代码集合指的是2.0版本和1.0版本下的代码集合,当3.0版本对应的状态值为开启值时,可以将2.0版本和1.0版本下的代码集合全部删除。将全部历史版本对应的代码集合,可以最大程度的释放存储空间,避免出现历史代码集合长时间保存在存储空间中,但并不使用的情况,造成存储空间的大量浪费。
76.删除历史代码集合时,还可以将部分版本对应的代码集合删除。例如,目标代码集合指的是3.0版本下的代码集合,历史代码集合指的是1.0版本下的代码集合,当3.0版本对应的状态值为开启值时,将1.0版本下的代码集合删除。而2.0版本下的代码集合仍保留在服务器中,以保证后续3.0版本下的代码集合运行出现故障后,可以切换执行2.0版本下的代码集合。将部分版本对应的代码集合删除,服务器中保存有当前版本的目标代码集合和部分历史版本的代码集合,若当前版本出现问题,可以切换到服务器中存留的历史版本的
代码集合,避免无代码可用的状态,保证用户的正常使用。
77.需要说明的是,上述例子中的版本仅为示例性解释说明,本申请的保护范围不以版本的具体设定和删除的具体版本为限制。
78.一个具体的实施例中,可以对服务器删除历史代码集合增加一个时机条件,当服务器触发该条件后,服务器启动删除历史代码集合的流程,例如,服务器接收到项目开发平台发送的版本更新指令时,服务器启动删除历史代码集合的流程。
79.一个实施例中,服务器中保存有状态值记录表。该状态值记录表中,记录有目标代码集合的当前状态值。当目标代码集合的当前状态值变化后,例如,当前状态值由开启值变为关闭值,或者,由关闭值变为开启值时,则在状态值记录表中,更新目标代码集合的当前状态值,以保证状态值记录表均为代码集合的最新状态。
80.状态值记录表用于记录代码集合的当前状态值。具体而言,一个状态值记录表可用于记录对应的一个代码集合的当前状态值,此时,在该实施例中,只需要确定目标代码集合对应的状态值记录表,并从中直接读取或更新目标代码集合的当前状态值即可。或者,一个状态值记录表也可用于记录多个代码集合的当前状态值,此时,需要在该状态值记录表中先确定目标代码集合所对应的数据,即可读取该数据或更新该数据。
81.具体的,状态值记录表中的每一个当前状态值,可以根据需要和实际情况设定表现形式,本申请的保护范围不以当前状态值的具体实现形式为限制。
82.例如,可以使用一个数值标识一个当前状态值,比如,1代表开启值,2代表关闭值。若当前状态值包含故障信息,可以使用一个两位数字代表一个当前状态值,比如,10代表开启值,21代表包含第一故障信息的关闭值,22代表包含第二故障信息的关闭值。
83.又例如,状态值记录表为一组二进制字符串,状态值记录表的每一个二进制位用于记录一个对应的代码集合的当前状态值。本实施例中,状态值记录表的每一个二进制位用于记录一个对应的代码集合的当前状态值,例如,一个二进制位上的数据为1时,对应的代码集合的当前状态值为开启值,一个二进制位上的数据为0时,对应的代码集合的当前状态值为关闭值。当需要将该状态值进行传输时,例如,由服务器传输给客户端时,可以减少数据传输量,加快传输速度,进一步提高代码管理的效率。
84.需要说明的是,本申请的保护范围不以状态值记录表的具体实现形式为限制。
85.一个实施例中,基于上个实施例,当客户端根据需要对代码集合进行配置时,例如,客户端启动时,客户端向服务器发送代码配置请求。服务器接收来自于客户端的代码配置请求,然后,向客户端发送状态值记录表,以使得客户端基于状态值记录表进行代码配置。
86.一个具体的实施例中,客户端向服务器发送的代码配置请求中,包含需要进行状态值配置的目标代码集合的唯一标识。服务器接收该代码配置请求后,根据唯一标识在状态值记录表中查询并获取到目标代码集合的当前状态值。服务器只需要将目标代码集合的当前状态值传输给客户端对目标代码集合进行配置即可,不需要传输整个状态值记录表,进一步减少服务器和客户端之间的数据传输量,提高传输速度。
87.一个实施例中,客户端运行的目标代码集合是向服务器请求的,当客户端需要代码集合时,则向服务器请求代码集合。如图2所示,具体过程如下:
88.步骤201,服务器接收来自于客户端的代码获取请求,其中,代码获取请求携带所
请求代码集合的唯一标识。
89.本实施例中,服务器端的代码集合,保存有代码集合对应的唯一标识,该唯一标识与上述实施例中描述的从项目开发平台或者预先设定的唯一标识相同,客户端能够从服务器获取该唯一标识。当客户端需要代码集合时,则根据需要的代码集合对应的唯一标识,生成代码获取请求。
90.步骤202,服务器基于代码获取请求中携带的唯一标识,确定代码获取请求所请求代码集合的当前状态值。
91.步骤203,服务器基于代码获取请求所请求代码集合的当前状态值,确定待执行代码集合。
92.步骤204,服务器向客户端发送待执行代码集合。
93.本实施例中,当客户端产生对代码集合的需要,例如,当客户端需要实现一个功能时,或者,服务器向客户端发送状态值记录表,以使得客户端基于状态值记录表进行代码配置之后,客户端生成代码获取请求,并将该代码获取请求发送给服务器。然后服务器基于代码获取请求中携带的唯一标识,确定代码获取请求所请求代码集合的当前状态值,在根据当前状态值,确定待执行代码集合,并将待执行代码集合发送给客户端。
94.一个实施例中,基于上个实施例描述的客户端通过代码获取请求向服务器请求代码集合的过程中,服务器需要根据所请求的代码集合是不是能够正常被执行,来确定服务器最终发送给客户端的待执行代码集合。具体的,基于代码获取请求所请求代码集合的当前状态值,确定目标代码集合,原则如下:
95.当代码获取请求所请求代码集合的当前状态值为开启值时,确定当前版本的代码集合为待执行代码集合;当代码获取请求所请求代码集合的当前状态值为关闭值时,确定一个历史版本的代码集合为待执行代码集合。
96.例如,服务器中保存有3.0版本下的代码集合、2.0版本下的代码集合和1.0版本下的代码集合。服务器接收到的代码获取请求中,包含3.0版本下的代码集合的唯一标识。根据唯一标识,查询状态值记录表,当3.0版本下的代码集合的当前状态值为开启值时,则确定3.0版本下的代码集合为待执行代码集合,服务器向客户发送3.0版本下的代码集合。当3.0版本下的代码集合的当前状态值为关闭值时,则确定2.0版本下的代码集合为待执行代码集合,服务器向客户发送2.0版本下的代码集合;或者,确定1.0版本下的代码集合为待执行代码集合,服务器向客户发送1.0版本下的代码集合。
97.本实施例中,目标代码集合与历史代码集合是实现同一个功能的不同版本的代码集合。在实际应用中,通常只有一个版本的代码集合被执行在客户端,为用户提供相应的功能服务,这个提供服务的版本的代码集合就是目标代码集合。而客户端向服务器所请求的代码集合,在理论上讲,应该是目标代码集合。但是,若所请求的代码集合的当前状态值为关闭值时,表明所请求的代码集合被执行后可能出现故障,所以不能将所请求的代码集合发送给服务器,而是要在历史代码集合中,重新确定一个待执行代码集合发送给服务器。也就是说,待执行代码集合可以为目标代码集合,也可以为一个历史版本的历史代码集合。
98.一个例子中,目标代码集合有对应的当前状态值,历史代码集合没有对应的当前状态值。当目标代码集合对应的当前状态值为关闭值时,可以根据需要设定为一个固定的版本发送给客户端,比如,将最新版本的历史代码集合发送给客户端,或者,随机确定一个
历史版本的代码集合发送给客户端。本申请的保护范围不以服务器向客户端返回的历史代码集合的具体版本为限制。这样可以避免客户端无法获取到代码,进而影响用户的使用体验。
99.一个例子中,目标代码集合和每一个版本的历史代码集合分别对应各自的当前状态值,即状态值记录表中除记录目标代码集合的当前状态值之外,还可以记录历史代码集合的当前状态值,而在确定发送给服务器的历史版本的代码集合时,需要将当前状态值为开启值的历史代码集合作为所请求的代码集合,发送给客户端。如此,可以避免客户端获得有故障的历史代码集合,进而影响客户的使用体验。
100.基于同一构思,以下实施例中,以客户端作为执行主体对代码管理方法进行简单介绍。由于上述以服务器作为执行主体,对代码管理方法进行介绍的过程中,已经详细描述了客户端与服务器之间的交互过程,所以以下实施例中,对于重复之处不再赘述。
101.一个实施例中,一种代码管理方法,应用于客户端时,如图3所示,包括以下步骤:
102.步骤301,当目标代码集合在客户端执行过程中出现故障后,客户端生成目标代码集合的故障信息,其中,故障信息包括目标代码集合的唯一标识,目标代码集合的当前状态值为开启值。
103.与服务器端的方法实施例对应,目标代码集合指的是在客户端执行的一段代码,该目标代码集合可以为实现同一个功能的基础代码集合,还可以为实现一个以上关联性功能的基础代码集合。本申请的保护范围不以目标代码集合包含的具体代码和实现的功能为限制。
104.目标代码集合在客户端执行过程中,可能因为例如编译错误等原因,造成目标代码集合在执行过程中出现故障,客户端出现故障后,会生成对应的故障信息,并将该故障信息传输给服务器。该故障信息包含了出现故障的目标代码集合的唯一标识。而目标代码集合的唯一标识,指的是能够唯一代表目标代码集合的标识,只要可以唯一代表目标代码集合,唯一标识可以为任何一种格式的标识。本申请的保护范围不以唯一标识的具体实现形式为限制。
105.步骤302,客户端向服务器发送故障信息,其中,故障信息用于获取目标代码集合对应的关闭值。
106.服务器接收到客户端传输的故障信息,若目标代码集合的当前状态值为开启值时,则需要根据目标代码集合的唯一标识,获取目标代码集合对应的关闭值,以通过该关闭值指示该目标代码集合不可被执行。关闭值的获取过程,是服务器通过目标代码集合的唯一标识自动完成的,并不需要人为进行处理或者配置。
107.步骤303,客户端接收服务器发送的状态值指示消息。
108.当目标代码集合的当前状态值为开启值时,服务器获取关闭值之后,生成状态值指示消息,该状态值指示消息中携带有关闭值。服务器将携带有关闭值的状态值指示消息发送给客户端。
109.步骤304,客户端根据状态值指示消息,将目标代码集合的当前状态值修改为关闭值。
110.客户端则根据该状态值指示消息将当前状态值修改为关闭值,如此,客户端不会再执行该目标代码集合,也就避免了运行故障代码导致的线上故障。
111.一个实施例中,当客户端需要对代码集合进行配置时,客户端通过向服务器发送代码配置请求,以完成配置过程,如图4所示,客户端实现代码管理方法的过程还包括以下步骤:
112.步骤401,当需要对代码的状态值进行配置时,客户端向服务器发送代码配置请求。
113.服务器中保存有状态值记录表。该状态值记录表中,记录有目标代码集合的当前状态值。
114.步骤402,客户端获取服务器返回的状态值记录表。
115.状态值记录表中的每一个当前状态值,可以根据需要和实际情况设定表现形式,本申请的保护范围不以当前状态值的具体实现形式为限制。例如,状态值记录表为一组二进制字符串,状态值记录表的每一个二进制位用于记录一个对应的代码集合的当前状态值。
116.步骤403,客户端基于状态值记录表进行代码配置。
117.客户端完成配置后,根据配置的具体情况,执行当前状态值为开启值的代码集合,避免执行有故障的代码集合。
118.一个实施例中,客户端运行的目标代码集合是向服务器请求的,当客户端需要代码集合时,则向服务器请求代码集合。客户端侧实现代码管理方法的过程还包括以下步骤:
119.当需要获取代码集合时,客户端向服务器发送代码获取请求,其中,代码获取请求携带所请求代码集合的唯一标识,唯一标识用于确定代码获取请求所请求代码集合的当前状态值;客户端获取服务器返回的待执行代码集合,其中,待执行代码集合由代码获取请求所请求代码集合的当前状态值来确定。
120.一个实施例中,需要通过所请求代码集合的当前状态值,来确定服务器向客户端发送的代码集合的具体版本。当代码获取请求所请求代码集合的当前状态值为开启值时,客户端获取服务器返回的待执行代码集合为当前版本的代码集合;当代码获取请求所请求代码集合的当前状态值为关闭值时,客户端获取服务器返回的待执行代码集合为一个历史版本的代码集合。
121.一个实施例中,服务器与项目开发平台配合完成代码管理的过程,而代码集合的状态值是根据预先设定的开启值和关闭值生成规则得到的。代码管理的具体过程如图5所示:
122.步骤501,服务器从项目开发平台获取目标代码集合的唯一标识。
123.步骤502,服务器根据唯一标识,通过预设的开启值和关闭值生成规则,生成代码集合对应的开启值和关闭值。
124.步骤503,服务器将唯一标识作为key,将开启值和关闭值作为value,以键值对的形式保存在服务器本地的存储器。
125.步骤504,服务器判断客户端目标代码集合执行过程中是否出现故障,若是,执行步骤505,若否,执行步骤506。
126.步骤505,服务器根据唯一标识,获取目标代码集合的关闭值,将包含关闭值的状态值指示消息发送给客户端,以使客户端完成目标代码集合的配置。
127.步骤506,服务器根据唯一标识,确定需要删除的历史代码集合,并执行删除操作。
128.本实施例,依托于项目开发平台,实现了通过唯一标识进行状态值配置以及使用的过程,该过程不需要人工管理,状态值的使用更加便捷。并且能够自动删除历史代码集合,避免冗余代码占用存储空间。
129.本申请实施例提供的代码管理方法,服务器接收到客户传输的目标代码集合执行过程中的故障信息后,当目标代码集合的当前状态值为开启值时,则根据故障信息中的目标代码集合的唯一标识,获取所述目标代码集合对应的关闭值;然后,服务器向客户端发送状态值指示消息,通过状态值指示消息指示客户端将目标代码集合的当前状态值修改为关闭值,其中,开启值用于指示目标代码集合可被执行,关闭值用于指示目标代码集合不可被执行。如此,客户端执行目标代码集合的过程中,出现故障后,自动将故障信息传输给服务器。服务器接收该故障信息后,自动根据该故障信息中的唯一标识,生成目标代码集合对应的关闭值,并通过状态值指示消息,将客户端中目标代码集合的状态值修改为关闭值。该过程实现了目标代码集合对应状态值的自动化管理,不再需要现有技术中的人工分析故障信息、人工辨别需要配置的代码集合以及关闭值的人工配置。本方法降低开发人员使用状态值的难度,提高开发过程的整体效率。
130.上述过程中,服务器接收客户端传输的故障信息后,能够自动识别故障信息中包含的目标代码集合的唯一标识,然后根据该唯一标识,自动获取目标代码集合对应的关闭值,并通过状态值指示消息将该客户端中目标代码集合的当前状态值修改为关闭值。服务器自动化处理过程,避免目标代码集合出现故障后,客户端仍旧在一段时间内执行该目标代码集合,从而大面积影响使用客户端的用户,降低用户的使用体验。同时,相对于技术人员人为分析故障信息,人工操作后生成关闭值的过程,以及人工辨别需要配置的代码集合,将生成的关闭值配置到该代码集合的过程,本方法实现了自动化管理过程,不再需要人工分析和配置,节省了大量人力资源,避免了人工处理可能会出现的主观性错误,且处理速度更加迅速,提高了开发过程的整体效率。
131.基于同一构思,本申请实施例中提供了一种代码管理的服务器装置,该装置的具体实施可参见方法实施例部分的描述,重复之处不再赘述,如图6所示,该装置主要包括:
132.第一接收模块601,用于接收客户端传输的目标代码集合执行过程中的故障信息,故障信息包括目标代码集合的唯一标识;
133.处理模块602,用于当目标代码集合的当前状态值为开启值时,根据故障信息中的唯一标识,获取目标代码集合对应的关闭值,其中,开启值用于指示目标代码集合可被执行,关闭值用于指示目标代码集合不可被执行;
134.第一发送模块603,用于向客户端发送状态值指示消息,状态值指示消息用于指示客户端将目标代码集合的当前状态值修改为关闭值。
135.一个实施例中,处理模块602,具体用于在预设的存储器中,获取唯一标识对应的关闭值,其中,关闭值是基于唯一标识预先生成的;或者,基于唯一标识,生成目标代码集合对应的关闭值。
136.一个实施例中,处理模块602,具体用于在预设的存储器中,获取与唯一标识对应,且与故障信息对应的关闭值,其中,关闭值是基于唯一标识和故障信息生成的,故障信息包括但不限于故障类型和/或故障编号;或者,基于唯一标识和故障信息,生成目标代码集合对应的关闭值。
137.一个实施例中,代码管理的服务器装置还包括删除模块604;
138.删除模块604,用于若在目标代码集合的完成执行过程中,均未接收到目标代码集合相关的故障信息,确定目标代码集合相关联的历史代码集合,其中,历史代码集合为目标代码集合的全部历史版本对应的代码集合,或部分历史版本对应的代码集合;删除历史代码集合。
139.一个实施例中,代码管理的服务器装置还包括更新模块605;
140.更新模块605,用于在状态值记录表中,更新目标代码集合的当前状态值;其中,状态值记录表为一组二进制字符串,状态值记录表的每一个二进制位用于记录一个对应的代码集合的当前状态值。
141.一个实施例中,代码管理的服务器装置还包括第一配置模块606;
142.第一配置模块606,用于接收来自于客户端的代码配置请求;向客户端发送状态值记录表,以使得客户端基于状态值记录表进行代码配置。
143.一个实施例中,代码管理的服务器装置还包括第一代码请求模块607;
144.第一代码请求模块607,用于接收来自于客户端的代码获取请求,其中,代码获取请求携带所请求代码集合的唯一标识;基于代码获取请求中携带的唯一标识,确定代码获取请求所请求代码集合的当前状态值;基于代码获取请求所请求代码集合的当前状态值,确定目标代码集合;向客户端发送目标代码集合。
145.一个实施例中,第一代码请求模块607,具体用于当代码获取请求所请求代码集合的当前状态值为开启值时,确定当前版本的代码集合为目标代码集合;当代码获取请求所请求代码集合的当前状态值为关闭值时,确定一个历史版本的代码集合为目标代码集合。
146.基于同一构思,本申请实施例中提供了一种代码管理的客户端装置,该装置的具体实施可参见方法实施例部分的描述,重复之处不再赘述,如图7所示,该装置主要包括:
147.生成模块701,用于当目标代码集合在执行过程中出现故障后,生成目标代码集合的故障信息,其中,故障信息包括目标代码集合的唯一标识,目标代码集合的当前状态值为开启值;
148.第二发送模块702,用于向服务器发送故障信息,其中,故障信息用于获取目标代码集合对应的关闭值;
149.第二接收模块703,用于接收服务器发送的状态值指示消息;
150.修改模块704,用于根据状态值指示消息,将目标代码集合的当前状态值修改为关闭值。
151.一个实施例中,代码管理的客户端装置还包括第二配置模块705;
152.第二配置模块705,用于当需要对代码的状态值进行配置时,向服务器发送代码配置请求;获取服务器返回的状态值记录表,其中,其中,状态值记录表为一组二进制字符串,状态值记录表的每一个二进制位用于记录一个对应的代码集合的当前状态值;基于状态值记录表进行代码配置。
153.一个实施例中,代码管理的客户端装置还包括第二代码请求模块706;
154.第二代码请求模块706,用于当需要获取代码集合时,向服务器发送代码获取请求,其中,代码获取请求携带所请求代码集合的唯一标识,唯一标识用于确定代码获取请求所请求代码集合的当前状态值;获取服务器返回的目标代码集合,其中,目标代码集合由代
码获取请求所请求代码集合的当前状态值来确定。
155.一个实施例中,第二代码请求模块706,具体用于当代码获取请求所请求代码集合的当前状态值为开启值时,获取服务器返回的当前版本的代码集合,其中,当前版本的代码集合为目标代码集合;当代码获取请求所请求代码集合的当前状态值为关闭值时,获取服务器返回的一个历史版本的代码集合,其中,一个历史版本的代码集合为目标代码集合。
156.基于同一构思,本申请实施例中还提供了一种电子设备,如图8所示,该电子设备主要包括:处理器801、存储器802和通信总线803,其中,处理器801和存储器802通过通信总线803完成相互间的通信。其中,存储器802中存储有可被至处理器801执行的程序,处理器801执行存储器802中存储的程序,实现上述代码管理方法中的任一实施例。
157.或者,实现如下步骤:当目标代码集合在执行过程中出现故障后,生成目标代码集合的故障信息,其中,故障信息包括目标代码集合的唯一标识,目标代码集合的当前状态值为开启值;向服务器发送故障信息,其中,故障信息用于获取目标代码集合对应的关闭值;接收服务器发送的状态值指示消息;根据状态值指示消息,将目标代码集合的当前状态值修改为关闭值。
158.上述电子设备中提到的通信总线803可以是外设部件互连标准(peripheral component interconnect,简称pci)总线或扩展工业标准结构(extended industry standard architecture,简称eisa)总线等。该通信总线803可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
159.存储器802可以包括随机存取存储器(random access memory,简称ram),也可以包括非易失性存储器(non
‑
volatile memory),例如至少一个磁盘存储器。可选地,存储器还可以是至少一个位于远离前述处理器801的存储装置。
160.上述的处理器801可以是通用处理器,包括中央处理器(central processing unit,简称cpu)、网络处理器(network processor,简称np)等,还可以是数字信号处理器(digital signal processing,简称dsp)、专用集成电路(application specific integrated circuit,简称asic)、现场可编程门阵列(field
‑
programmable gate array,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
161.在本申请的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,当该计算机程序在计算机上运行时,使得计算机执行上述实施例中所描述的代码管理方法。
162.在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行该计算机指令时,全部或部分地产生按照本申请实施例所述的流程或功能。该计算机可以时通用计算机、专用计算机、计算机网络或者其他可编程装置。该计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、微波等)方式向另外一个网站站点、计算机、服务器或数据中心进行传输。该计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介
质集成的服务器、数据中心等数据存储设备。该可用介质可以是磁性介质(例如软盘、硬盘、磁带等)、光介质(例如dvd)或者半导体介质(例如固态硬盘)等。
163.需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
164.以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。