CN113342387A - 一种软件自动升级方法、更新客户端及更新服务器 - Google Patents

一种软件自动升级方法、更新客户端及更新服务器 Download PDF

Info

Publication number
CN113342387A
CN113342387A CN202110481990.5A CN202110481990A CN113342387A CN 113342387 A CN113342387 A CN 113342387A CN 202110481990 A CN202110481990 A CN 202110481990A CN 113342387 A CN113342387 A CN 113342387A
Authority
CN
China
Prior art keywords
file
software
version number
software file
updating
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
CN202110481990.5A
Other languages
English (en)
Inventor
李成龙
高闽
马海山
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Fangjianghu Technology Co Ltd
Original Assignee
Beijing Fangjianghu Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Fangjianghu Technology Co Ltd filed Critical Beijing Fangjianghu Technology Co Ltd
Priority to CN202110481990.5A priority Critical patent/CN113342387A/zh
Publication of CN113342387A publication Critical patent/CN113342387A/zh
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/658Incremental updates; Differential updates

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Information Transfer Between Computers (AREA)
  • Stored Programmes (AREA)

Abstract

本发明实施例提供一种软件自动升级方法、更新客户端及更新服务器,该方法包括:从更新服务端下载最新版本第一版本号文件以及获取本地最新版本第二版本号文件;版本号文件包括软件文件路径、软件文件签名值及软件文件在更新服务端的软件文件存储地址;将第一版本号文件和第二版本号文件中的相同软件文件路径对应的软件文件的软件文件签名值进行对比,获取具有相同软件文件路径但具有不同软件文件签名值的第一软件文件路径,下载并更新对应的软件文件;获取存在于所述第一版本号文件但不存在于所述第二版本号文件的第二软件文件路径,新增对应的软件文件。本发明实施例提供的软件自动升级方法、更新客户端及更新服务器,显著提高了软件升级速度。

Description

一种软件自动升级方法、更新客户端及更新服务器
技术领域
本发明涉及计算机及通信技术领域,具体涉及一种软件自动升级方法、更新客户端及更新服务器。
背景技术
在很多领域,有很多大型软件在使用。这些软件设计复杂、开发难度大,软件的更新和升级较为困难。软件迭代的自动化程度低,每一次程序员提交代码后都需要有人手动更新代码执行相应指令,还非常容易出错。软件升级更新不方便,每一次升级需要打包人员将安装包手动分发给用户,安装包大传输慢,软件升级效率低下。
以BIM(Building Information Modeling,建筑信息模型)软件为例,BIM是以建筑工程项目的各项相关信息数据作为基础,为建设项目全生命周期设计、施工和运营服务的“数字模型”。BIM软件设计复杂,开发难度大,造成软件的更新和升级也较为困难,通常BIM升级采用覆盖式安装模式,此模式下升级需要下载较大的安装包,给BIM设计师带来很多不便。BIM软件升级时,需要打包人员手动更新代码,然后执行编译和打包指令,由于软件复杂指令繁多,手动打包时极易出错;打包成功后将BIM软件包分发给BIM设计师,安装包大造成传输和下载都很慢。
发明内容
为解决或至少部分地解决现有技术中的问题,本发明实施例提供一种软件自动升级方法、更新客户端及更新服务器。
第一方面,本发明实施例提供一种软件自动升级方法,该方法包括:更新客户端从更新服务端下载所述更新服务端最新版本的第一版本号文件以及获取本地最新版本的第二版本号文件;其中,所述第一版本号文件及所述第二版本号文件包括软件文件路径、软件文件签名值及软件文件在所述更新服务端的软件文件存储地址;所述更新客户端将所述第一版本号文件和所述第二版本号文件中的相同所述软件文件路径对应的所述软件文件的所述软件文件签名值进行对比,获取具有相同软件文件路径但具有不同所述软件文件签名值的第一软件文件路径;所述更新客户端根据所述第一软件文件路径在所述第一版本号文件中对应的第一软件文件的所述软件文件存储地址从所述更新服务端下载所述第一软件文件,用所述第一软件文件替换所述本地相同所述软件文件路径对应的同名文件;和/或,所述更新客户端获取存在于所述第一版本号文件但不存在于所述第二版本号文件的第二软件文件路径,根据所述第二软件文件路径对应的第二软件文件的所述软件文件存储地址从所述更新服务端下载所述第二软件文件,将所述第二软件文件存储在本地所述第二软件文件路径的位置。
进一步地,在所述更新客户端从更新服务端下载所述更新服务端最新版本的第一版本号文件以及获取本地最新版本的第二版本号文件之前,所述方法还包括:所述更新客户端向所述更新服务端发起版本更新信息获取请求,并接收所述更新服务端在接收到所述版本更新信息获取请求后发送的所述第一版本号文件的存储位置信息。
进一步地,所述方法还包括:在所述更新客户端接收到点击操作信息后,触发所述更新客户端向所述更新服务端发起所述版本更新信息获取请求。
进一步地,所述方法还包括:将所述第一软件文件和/或所述第二软件文件对应的所述软件文件路径存储到更新列表;根据所述更新列表计算相应所述第一软件文件和/或相应所述第二软件文件的所述软件文件签名值,并将所述所述第一软件文件和/或所述第二软件文件的软件文件签名值与所述第一版本号文件中的具有相同所述软件文件路径对应的同名文件的所述软件文件签名值进行比对;若一致,则启动软件;若不一致,所述更新客户端报错。
第二方面,本发明实施例提供另一种软件自动升级方法,该方法包括:更新服务端通过持续集成服务监控代码管理器的代码更新状态以及获取更新的代码文件;根据所述更新的代码文件采用自动化脚本编译成可执行程序,并将所述可执行程序压缩打包得到软件的全量包;所述更新服务端将所述全量包中的所述软件文件上传到文件服务器,并且计算各个所述软件文件的所述软件文件签名值,将所述软件文件签名值、所述软件文件对应的软件文件路径及所述软件文件在所述更新服务端的软件文件存储地址写入版本号文件。
进一步地,在所述将所述可执行程序压缩打包得到软件的全量包之后,所述方法还包括:自动更新版本号,并将更新的所述版本号赋予所述版本号文件。
第三方面,本发明提供一种更新客户端,该更新客户端包括:版本号文件获取模块,用于:从更新服务端下载所述更新服务端最新版本的第一版本号文件以及获取本地最新版本的第二版本号文件;其中,所述第一版本号文件及所述第二版本号文件包括软件文件路径、软件文件签名值及软件文件在所述更新服务端的软件文件存储地址;更新模块,用于:将所述第一版本号文件和所述第二版本号文件中的相同所述软件文件路径对应的所述软件文件的所述软件文件签名值进行对比,获取具有相同软件文件路径但具有不同所述软件文件签名值的第一软件文件路径;根据所述第一软件文件路径在所述第一版本号文件中对应的第一软件文件的所述软件文件存储地址从所述更新服务端下载所述第一软件文件,用所述第一软件文件替换所述本地相同所述软件文件路径对应的同名文件;和/或,获取存在于所述第一版本号文件但不存在于所述第二版本号文件的第二软件文件路径,根据所述第二软件文件路径对应的第二软件文件的所述软件文件存储地址从所述更新服务端下载所述第二软件文件,将所述第二软件文件存储在本地所述第二软件文件路径的位置。
第四方面,本发明提供一种更新服务端,该更新服务端包括:全量包更新模块,用于:通过持续集成服务监控代码管理器的代码更新状态以及获取更新的代码文件;根据所述更新的代码文件采用自动化脚本编译成可执行程序,并将所述可执行程序压缩打包得到软件的全量包;软件文件存储及版本号文件更新模块,用于:将所述全量包中的所述软件文件上传到文件服务器,并且计算各个所述软件文件的所述软件文件签名值,将所述软件文件签名值、所述软件文件对应的软件文件路径及所述软件文件的软件文件存储地址写入版本号文件。
第五方面,本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面或第二方面所述更新客户端的软件自动升级方法的方法步骤。
第六方面,本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面或第二方面的软件自动升级方法的方法步骤。
本发明实施例提供的软件自动升级方法、更新客户端及更新服务器,通过利用版本号文件存储软件文件路径、软件文件签名值及软件文件在更新服务端的软件文件存储地址,在判断软件文件签名值不同时获取软件更新信息,并单独更新变化或增量文件,显著提高了软件升级速度。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例提供的软件自动升级方法流程图;
图2是本发明另一实施例提供的软件自动升级方法流程图;
图3是本发明再一实施例提供的软件自动升级方法流程图;
图4是本发明一实施例提供的更新客户端的结构示意图;
图5是本发明一实施例提供的更新服务端的结构示意图;
图6示例了一种电子设备的实体结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1是本发明一实施例提供的软件自动升级方法流程图。本实施例提供的软件自动升级方法可以应用于更新客户端。如图1所示,所述方法包括:
步骤101、更新客户端从更新服务端下载所述更新服务端最新版本的第一版本号文件以及获取本地最新版本的第二版本号文件;其中,所述第一版本号文件及所述第二版本号文件包括软件文件路径、软件文件签名值及软件文件在所述更新服务端的软件文件存储地址。
本发明实施例提供的软件自动升级方法可以适用于绿色免安装的软件的升级。一个软件通常由多个文件组成,这些文件可以称为软件文件。本发明实施例中通过版本号文件存储软件文件路径、软件文件签名值及软件文件在更新服务端的软件文件存储地址,而不存储具体的软件文件,在确定需要更新软件文件后再下载相应的软件文件,从而减少软件更新需要传输的数据量。其中,软件文件路径可以反映出各个软件文件的层级关系。版本号文件中的软件文件路径可以是相对于各个软件使用端的路径均一致的路径。比如,对于软件A中的文件c,其文件路径可以表示为A\a\b\c。软件在使用端使用时,可以将软件放置在不同的磁盘运行,比如可以是C盘,也可以是E盘。在C盘运行时,文件c的路径可以是C:\A\a\b\c。在E盘运行时,文件c的路径可以是E:\A\a\b\c。由于在软件使用端软件运行在哪个磁盘是已知的,因此,可以获取文件c的软件文件路径。
软件文件签名值是对软件文件通过数字签名算法得到签名值,数字签名算法可以采用MD5算法、SHA256等算法。只要软件文件发生改变,则其软件文件签名值就发生变化。因此,根据软件文件签名值是否发生变化,可以判断软件文件是否发生变化。软件的软件文件存储在更新服务端,版本号文件还包括软件文件在更新服务端的软件文件存储地址。
上述第一版本号文件和第二版本号文件均是版本号文件,区别就是第一版本号文件是更新服务端当前最新版本的版本号文件,第二版本号文件是更新客户端最新版本的版本号文件。更新客户端的版本号文件是来自于更新服务端并存储于本地的。
在更新客户端开启检查更新进程时,首先,更新客户端从更新服务端下载更新服务端最新版本的第一版本号文件以及获取本地存储的最新版本的第二版本号文件;其中,第一版本号文件及第二版本号文件包括软件文件路径、软件文件签名值及软件文件在更新服务端的软件文件存储地址。
步骤102、所述更新客户端将所述第一版本号文件和所述第二版本号文件中的相同所述软件文件路径对应的所述软件文件的所述软件文件签名值进行对比,获取具有相同软件文件路径但具有不同所述软件文件签名值的第一软件文件路径;所述更新客户端根据所述第一软件文件路径在所述第一版本号文件中对应的第一软件文件的所述软件文件存储地址从所述更新服务端下载所述第一软件文件,用所述第一软件文件替换所述本地相同所述软件文件路径对应的同名文件;
和/或,
所述更新客户端获取存在于所述第一版本号文件但不存在于所述第二版本号文件的第二软件文件路径,根据所述第二软件文件路径对应的第二软件文件的所述软件文件存储地址从所述更新服务端下载所述第二软件文件,将所述第二软件文件存储在本地所述第二软件文件路径的位置。
在版本号文件中,软件文件签名值预先计算好并和软件文件路径对应的软件文件一一对应存储。软件文件名称可以从上述软件文件路径获取,比如,A\a\b\c中,c就是软件文件名称。因此,根据软件文件路径获取第一版本号文件和第二版本号文件中相同的软件文件名称,进而可以获取相应的软件文件签名值进行比较。可以理解的,由于软件文件路径具有层级关系,下级的所有文件构成上级文件,因此,只需对最末端的文件的软件文件签名值进行比较即可。
更新客户端将第一版本号文件和第二版本号文件中的相同软件文件路径对应的软件文件的软件文件签名值进行对比。可以理解的是,相同软件文件路径可以包括软件文件的绝对路径相同,也可以包括相对路径相同,例如各自相对于各自软件全量包存储的位置的路径相同。获取具有相同软件文件名称但是软件文件签名值不同的第一软件文件路径,这时说明相应的软件文件具有更新。并且还可以获取第一版本号文件存在但第二版本号文件不存在的第二软件文件路径,这时说明相应的软件文件在更新服务端存在、但在本地(软件使用方)不存在,也即表示更新服务端新增添了文件。
若通过比对发现软件文件签名值均相同,也没有新增文件,说明软件没有更新,可以直接运行。由于版本号文件中的软件文件签名值是预先计算好并存储的,因此即使软件文件很多,比对过程也很快。
更新客户端根据第一软件文件路径在第一版本号文件中对应的第一软件文件的软件文件存储地址从更新服务端下载第一软件文件,用第一软件文件替换本地相同软件文件路径对应的同名文件。更新客户端还可以根据第二软件文件路径对应的第二软件文件的软件文件存储地址从更新服务端下载第二软件文件,将第二软件文件存储在本地第二软件文件路径的位置,从而实现更新操作。
本发明实施例通过利用版本号文件存储软件文件路径、软件文件签名值及软件文件在更新服务端的软件文件存储地址,在判断软件文件签名值不同时获取软件更新信息,并单独更新变化或增量文件,显著提高了软件升级速度。
进一步地,基于上述实施例,在所述更新客户端从更新服务端下载所述更新服务端最新版本的第一版本号文件以及获取本地最新版本的第二版本号文件之前,所述方法还包括:所述更新客户端向所述更新服务端发起版本更新信息获取请求,并接收所述更新服务端在接收到所述版本更新信息获取请求后发送的所述第一版本号文件的存储位置信息。
在更新客户端从更新服务端下载更新服务端最新版本的第一版本号文件以及获取本地存储的最新版本的第二版本号文件之前,更新客户端向更新服务端发起版本更新信息获取请求,如更新客户端发起http请求询问更新服务端是否有版本更新。更新服务端接收到版本更新信息获取请求后,获取当前最新版本的版本号文件的存储位置信息并发送给更新客户端。更新客户端根据当前最新版本的版本号文件的存储位置信息从更新服务端下载更新服务端最新版本的第一版本号文件。
在上述实施例的基础上,本发明实施例更新客户端通过向更新服务端发起版本更新信息获取请求,并接收更新服务端在接收到版本更新信息获取请求后发送的第一版本号文件的存储位置信息,便利了第一版本号文件的下载。
进一步地,基于上述实施例,所述方法还包括:在所述更新客户端接收到点击操作信息后,触发所述更新客户端向所述更新服务端发起所述版本更新信息获取请求。
更新客户端可以是一个独立的可执行文件,运行此文件可以自动判断是否需要更新,并执行更新操作。运行更新客户端可以通过点击更新客户端的图标实现,如双击等。在更新客户端接收到点击操作信息后,触发更新客户端向更新服务端发起版本更新信息获取请求,进而执行相应的更新操作。
在上述实施例的基础上,本发明实施例通过在更新客户端接收到点击操作信息后,触发更新客户端向更新服务端发起版本更新信息获取请求,提高了更新客户端运行的便利性。
进一步地,基于上述实施例,所述方法还包括:将所述第一软件文件和/或所述第二软件文件对应的所述软件文件路径存储到更新列表;根据所述更新列表计算相应所述第一软件文件和/或相应所述第二软件文件的所述软件文件签名值,并将所述第一软件文件和/或所述第二软件文件的所述软件文件签名值与所述第一版本号文件中的相同所述软件文件路径对应的同名文件的所述软件文件签名值进行比对;若一致,则启动软件;若不一致,所述更新客户端报错。
为保证下载的文件完整且下载过程没有更改,在实现更新操作之后,将第一软件文件和/或第二软件文件的软件文件路径存储到更新列表。然后,根据更新列表中的软件文件路径获取到发生更新的软件文件,并重新计算软件文件签名值。将重新计算后的软件文件签名值与第一版本号文件中相同软件文件路径下的同名文件的软件文件签名值进行比较,若均一致,表示所有文件校验通过,则更新成功,可以直接触发启动软件。若有文件校验失败,则更新失败,更新客户端报错,并且可以在报错后退出,无法启动软件。
在上述实施例的基础上,本发明实施例通过在实现更新操作后,重新计算发生更新的软件文件的软件文件签名值并与第一版本号文件中的软件文件签名值进行比较,在校验通过时启动软件,保障了软件更新升级的可靠性;同时,在更新成功后,直接触发软件运行,实现了更新操作和软件开启操作的集成。
图2是本发明另一实施例提供的软件自动升级方法流程图。本实施例提供的软件自动升级方法可以应用于更新服务端。如图2所示,所述方法包括:
步骤201、更新服务端通过持续集成服务监控代码管理器的代码更新状态以及获取更新的代码文件;根据所述更新的代码文件采用自动化脚本编译成可执行程序,并将所述可执行程序压缩打包得到软件的全量包。
更新服务端是更新客户端对应的服务端,服务于软件更新程序。更新服务端可以通过和代码管理服务器及持续集成服务相配合实现相应的功能。代码管理服务器是用来管理代码的,程序员在对软件迭代后提交代码到代码管理服务器。代码管理服务器如git服务器。持续集成服务用于监控代码管理服务器是否发生了代码更新,若是,则拉取更新的代码并反馈给更新服务端。持续集成服务可以采用Jenkins实现,Jenkins可以采用自建任务的方式运行,每隔一定时间监听一下代码管理器的代码更新情况。持续集成服务还可以采用git服务器的runner方式运行,或采用其他替代持续集成方案。
更新服务端通过持续集成服务监控代码管理器的代码更新状态以及获取更新的代码文件。在获取到更新的代码文件后,更新服务端采用自动化脚本编译成可执行程序,并将可执行程序压缩打包得到软件的全量包。生成的软件的全量包可以存储于版本库中,比如可以采用Artifactory存放发版时的软件。
步骤202、所述更新服务端将所述全量包中的所述软件文件上传到文件服务器,并且计算各个所述软件文件的所述软件文件签名值,将所述软件文件签名值、所述软件文件对应的软件文件路径及所述软件文件在所述更新服务端的软件文件存储地址写入版本号文件。
全量包可以是对编译后的可执行程序压缩后的文件。更新服务端可以将全量包解压后,将全量包中的软件文件上传到文件服务器,获取到各个软件文件及各个软件文件的软件文件路径,并且通过数字签名算法计算软件文件的软件文件签名值,将软件文件签名值、软件文件路径及软件文件在更新服务端的软件文件存储地址写入版本号文件一一对应存储。
本发明实施例更新服务端通过持续集成服务监控代码管理器的代码更新状态以及获取更新的代码文件,根据更新的代码文件采用自动化脚本编译成可执行程序,并将可执行程序压缩打包得到软件的全量包,实现了软件更新后的自动化编译及打包,提高了服务端软件更新的自动化水平;通过将软件文件签名值、软件文件路径及软件文件在更新服务端的软件文件存储地址写入版本号文件,为后续更新客户端的软件更新提供了基础。
进一步地,基于上述实施例,在所述将所述可执行程序压缩打包得到软件的全量包之后,所述方法还包括:自动更新版本号,并将更新的所述版本号赋予所述版本号文件。
可以通过版本管理器自动更新版本号。通常版本号为v1.0.0的形式,每次提交小数点最后一位数字会自动增加,例如下一个版本号为v1.0.1,可以人工修改。在自动更新版本号之后,将更新的版本号赋予版本号文件。比如可以在版本号文件的名称中或版本号文件的版本信息中包括版本号的信息,由此可以获知版本号文件对应的软件包(比如上述全量包)的版本。
另外,还可以利用版本管理器存储版本号文件在文件服务器的存储位置。
在上述实施例的基础上,本发明实施例通过自动更新版本号,并将更新的版本号赋予版本号文件,便利了获取最新版本的版本号文件。
图3是本发明再一实施例提供的软件自动升级方法流程图。下面结合图3,以BIM软件升级为例进一步说明本发明实施例提供的软件自动升级方法的流程。
下面先给出相关的名词解释:
1.GIT服务:git服务器,用于管理代码版本,可以采用gitlab作为服务器,也可以使用其它git服务端方案,或采用svn来管理代码。
2.Jenkins服务:Jenkins服务是持续集成中常用的软件,本发明实施例采用Jenkins自建任务方式运行,也可使用gitlab的runner方式运行,或其它替代持续集成方案。
3.版本库:用于存放软件并记录版本的构建产出物存放地址,本发明实施例采用Artifactory存放发版时的BIM软件,也可以采用其它构建产出管理软件替代。
4.文件服务器:用于存放组成BIM软件的各种类型文件,本发明实施例采用AmazonS3作为文件服务器,也可以使用其它文件服务器替代。
5.文件签名:通常采用MD5算法,可用SHA256等其它数字签名算法代替。
6.版本管理器:负责自动生成服务端版本号,通常版本号为v1.0.0的形式,每次提交小数点最后一位数字会自动增加,例如下一个版本号为v1.0.1,可以人工修改。
7.更新客户端:BIM软件的一部分,一个独立的可执行文件,运行此文件可以自动判断是否需要更新,并执行更新操作。
本发明实施例中,更新服务端负责编译BIM软件并对软件进行管理,更新客户端负责更新BIM软件。如图3所示,分别解释更新服务端和更新客户端的工作流程如下:
一、更新服务端
1.git服务器接收到提交的代码。
2.Jenkins每隔3分钟(可设置)会请求git服务器获取代码最新状态。
1)代码未更新(3分钟内程序员无提交操作),Jenkins继续等待3分钟;
2)代码已更新(3分钟内程序员有提交操作),Jenkins自动拉取对应提交分支的最新代码。
3.Jenkins执行编译脚本将程序员的代码编译为可执行程序。
4.将应用程序压缩成zip格式的压缩包,并上传到版本库,此包为全量包,BIM设计师第一次安装时可以从版本库下载并解压。
5.计算BIM软件每一个文件的签名,将文件上传到文件服务器,将签名写入版本号文件。
二、更新客户端
1.用户点击更新客户端,更新客户端开启检查更新进程;
2.更新客户端发起http请求询问更新服务端是否有版本更新;
更新服务端将最新版本号文件地址返回给更新客户端;
3.更新客户端根据最新版本号文件地址下载版本号文件,读取版本号文件里软件文件名(通过软件文件路径)、软件文件签名值、软件文件在文件服务器存放地址;更新客户端获取本地最新版本的版本号文件;
4.更新客户端根据最新版本号文件中的软件文件路径将本地存储BIM软件所有软件文件签名值与更新服务器的软件文件签名值进行对比;
1)本地BIM软件文件签名与更新服务端版本号文件中对应BIM软件文件签名相同则不用更新,不执行任何操作;
2)本地BIM软件文件签名与更新服务端版本号文件中对应BIM软件文件签名不同则使用文件服务器存放地址下载此文件,替换本地BIM软件中同名文件,实现更新操作;
获取存在于更新服务端最新版本号文件但不存在于本地最新版本号文件的软件文件路径,根据获取的软件文件路径对应的软件文件的软件文件存储地址从更新服务端下载相应软件文件,将下载的软件文件存储在本地对应软件文件路径的位置;
同时将更新及新增的软件文件路径(软件文件路径中包括文件名)写入更新列表(如图3所示,也可先写入更新列表);
5.执行步骤4直到所有BIM软件中文件都被正确处理;
6.将更新列表中已下载替换或新增的软件文件再次计算签名并与版本号文件中签名对比,确保下载的文件完整且下载过程中没有被修改;
1)所有文件校验通过,则更新成功,用户可以启动BIM软件;
2)当有文件校验失败,则更新失败,更新客户端报错并退出。
本发明实施例的有益效果包括:
(1)采用持续集成技术自动编译代码,打发版包。
采用Jenkins监控git服务器是否有代码提交,如果有提交则自动进行编译和打包;编译和打包采用自动化脚本方式替换人工输入指令,降低出错率。
(2)软件自动判断是否需要更新,采取增量更新策略更快速。
软件请求服务器询问是否需要升级,服务器控制软件升级逻辑,当需要升级时只需从文件服务器拉取需要升级的文件,不需要整个软件都进行替换。
本发明实施例提供的软件自动升级方法可以有效解决BIM等软件发版与升级效率低问题,充分释放相关流程中人力消耗,同时降低软件更新时间。
图4是本发明一实施例提供的更新客户端的结构示意图。如图4所示,所述更新客户端包括版本号文件获取模块10及更新模块20,其中:
版本号文件获取模块10用于:从更新服务端下载所述更新服务端最新版本的第一版本号文件以及获取本地最新版本的第二版本号文件;其中,所述第一版本号文件及所述第二版本号文件包括软件文件路径、软件文件签名值及软件文件在所述更新服务端的软件文件存储地址;
更新模块20用于:将所述第一版本号文件和所述第二版本号文件中的相同所述软件文件路径对应的所述软件文件的所述软件文件签名值进行对比,获取具有相同软件文件路径但具有不同所述软件文件签名值的第一软件文件路径;根据所述第一软件文件路径在所述第一版本号文件中对应的第一软件文件的所述软件文件存储地址从所述更新服务端下载所述第一软件文件,用所述第一软件文件替换所述本地相同所述软件文件路径对应的同名文件;
和/或,
获取存在于所述第一版本号文件但不存在于所述第二版本号文件的第二软件文件路径,根据所述第二软件文件路径对应的第二软件文件的所述软件文件存储地址从所述更新服务端下载所述第二软件文件,将所述第二软件文件存储在本地所述第二软件文件路径的位置。
本发明实施例通过利用版本号文件存储软件文件路径、软件文件签名值及软件文件在更新服务端的软件文件存储地址,在判断软件文件签名值不同时获取软件更新信息,并单独更新变化或增量文件,显著提高了软件升级速度。
进一步地,基于上述实施例,在所述从更新服务端下载所述更新服务端最新版本的第一版本号文件以及获取本地最新版本的第二版本号文件之前,所述版本号文件获取模块10还用于:向所述更新服务端发起版本更新信息获取请求,并接收所述更新服务端在接收到所述版本更新信息获取请求后发送的所述第一版本号文件的存储位置信息。
在上述实施例的基础上,本发明实施例更新客户端通过向更新服务端发起版本更新信息获取请求,并接收更新服务端在接收到版本更新信息获取请求后发送的第一版本号文件的存储位置信息,便利了第一版本号文件的下载。
进一步地,基于上述实施例,所述版本号文件获取模块10还用于:在接收到点击操作信息后,向所述更新服务端发起所述版本更新信息获取请求。
在上述实施例的基础上,本发明实施例通过在更新客户端接收到点击操作信息后,触发更新客户端向更新服务端发起版本更新信息获取请求,提高了更新客户端运行的便利性。
进一步地,基于上述实施例,所述更新模块20还用于:将所述第一软件文件和/或所述第二软件文件对应的所述软件文件路径存储到更新列表;根据所述更新列表计算相应所述第一软件文件和/或相应所述第二软件文件的所述软件文件签名值,并将所述第一软件文件和/或所述第二软件文件的所述软件文件签名值与所述第一版本号文件中的相同所述软件文件路径对应的同名文件的所述软件文件签名值进行比对;若一致,则启动软件;若不一致,则报错。
在上述实施例的基础上,本发明实施例通过在实现更新操作后,重新计算发生更新的软件文件的软件文件签名值并与第一版本号文件中的软件文件签名值进行比较,在校验通过时启动软件,保障了软件更新升级的可靠性;同时,在更新成功后,直接触发软件运行,实现了更新操作和软件开启操作的集成。
图5是本发明一实施例提供的更新服务端的结构示意图。如图5所示,所述更新服务端包括全量包更新模块30及软件文件存储及版本号文件更新模块40,其中:全量包更新模块30用于:通过持续集成服务监控代码管理器的代码更新状态以及获取更新的代码文件;根据所述更新的代码文件采用自动化脚本编译成可执行程序,并将所述可执行程序压缩打包得到软件的全量包;软件文件存储及版本号文件更新模块40用于:将所述全量包中的所述软件文件上传到文件服务器,并且计算各个所述软件文件的所述软件文件签名值,将所述软件文件签名值、所述软件文件对应的软件文件路径及所述软件文件的软件文件存储地址写入版本号文件。
本发明实施例更新服务端通过持续集成服务监控代码管理器的代码更新状态以及获取更新的代码文件,根据更新的代码文件采用自动化脚本编译成可执行程序,并将可执行程序压缩打包得到软件的全量包,实现了软件更新后的自动化编译及打包,提高了服务端软件更新的自动化水平;通过将软件文件签名值、软件文件路径及软件文件在更新服务端的软件文件存储地址写入版本号文件,为后续更新客户端的软件更新提供了基础。
进一步地,基于上述实施例,软件文件存储及版本号文件更新模块40还用于:自动更新版本号,并将更新的所述版本号赋予所述版本号文件。
在上述实施例的基础上,本发明实施例通过自动更新版本号,并将更新的版本号赋予版本号文件,便利了获取最新版本的版本号文件。
图6示例了一种电子设备的实体结构示意图,如图6所示,该电子设备可以包括:处理器(processor)410、通信接口(Communications Interface)420、存储器(memory)430和通信总线440,其中,处理器410,通信接口420,存储器430通过通信总线440完成相互间的通信。处理器410可以调用存储器430中的逻辑指令,以执行软件自动升级方法,该方法包括:更新客户端从更新服务端下载所述更新服务端最新版本的第一版本号文件以及获取本地最新版本的第二版本号文件;其中,所述第一版本号文件及所述第二版本号文件包括软件文件路径、软件文件签名值及软件文件在所述更新服务端的软件文件存储地址;所述更新客户端将所述第一版本号文件和所述第二版本号文件中的相同所述软件文件路径对应的所述软件文件的所述软件文件签名值进行对比,获取具有相同软件文件路径但具有不同所述软件文件签名值的第一软件文件路径;所述更新客户端根据所述第一软件文件路径在所述第一版本号文件中对应的第一软件文件的所述软件文件存储地址从所述更新服务端下载所述第一软件文件,用所述第一软件文件替换所述本地相同所述软件文件路径对应的同名文件;和/或,所述更新客户端获取存在于所述第一版本号文件但不存在于所述第二版本号文件的第二软件文件路径,根据所述第二软件文件路径对应的第二软件文件的所述软件文件存储地址从所述更新服务端下载所述第二软件文件,将所述第二软件文件存储在本地所述第二软件文件路径的位置;或该方法包括:更新服务端通过持续集成服务监控代码管理器的代码更新状态以及获取更新的代码文件;根据所述更新的代码文件采用自动化脚本编译成可执行程序,并将所述可执行程序压缩打包得到软件的全量包;所述更新服务端将所述全量包中的所述软件文件上传到文件服务器,并且计算各个所述软件文件的所述软件文件签名值,将所述软件文件签名值、所述软件文件对应的软件文件路径及所述软件文件在所述更新服务端的软件文件存储地址写入版本号文件。
此外,上述的存储器430中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的软件自动升级方法,该方法包括:更新客户端从更新服务端下载所述更新服务端最新版本的第一版本号文件以及获取本地最新版本的第二版本号文件;其中,所述第一版本号文件及所述第二版本号文件包括软件文件路径、软件文件签名值及软件文件在所述更新服务端的软件文件存储地址;所述更新客户端将所述第一版本号文件和所述第二版本号文件中的相同所述软件文件路径对应的所述软件文件的所述软件文件签名值进行对比,获取具有相同软件文件路径但具有不同所述软件文件签名值的第一软件文件路径;所述更新客户端根据所述第一软件文件路径在所述第一版本号文件中对应的第一软件文件的所述软件文件存储地址从所述更新服务端下载所述第一软件文件,用所述第一软件文件替换所述本地相同所述软件文件路径对应的同名文件;和/或,所述更新客户端获取存在于所述第一版本号文件但不存在于所述第二版本号文件的第二软件文件路径,根据所述第二软件文件路径对应的第二软件文件的所述软件文件存储地址从所述更新服务端下载所述第二软件文件,将所述第二软件文件存储在本地所述第二软件文件路径的位置;或该方法包括:更新服务端通过持续集成服务监控代码管理器的代码更新状态以及获取更新的代码文件;根据所述更新的代码文件采用自动化脚本编译成可执行程序,并将所述可执行程序压缩打包得到软件的全量包;所述更新服务端将所述全量包中的所述软件文件上传到文件服务器,并且计算各个所述软件文件的所述软件文件签名值,将所述软件文件签名值、所述软件文件对应的软件文件路径及所述软件文件在所述更新服务端的软件文件存储地址写入版本号文件。
又一方面,本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的软件自动升级方法,该方法包括:更新客户端从更新服务端下载所述更新服务端最新版本的第一版本号文件以及获取本地最新版本的第二版本号文件;其中,所述第一版本号文件及所述第二版本号文件包括软件文件路径、软件文件签名值及软件文件在所述更新服务端的软件文件存储地址;所述更新客户端将所述第一版本号文件和所述第二版本号文件中的相同所述软件文件路径对应的所述软件文件的所述软件文件签名值进行对比,获取具有相同软件文件路径但具有不同所述软件文件签名值的第一软件文件路径;所述更新客户端根据所述第一软件文件路径在所述第一版本号文件中对应的第一软件文件的所述软件文件存储地址从所述更新服务端下载所述第一软件文件,用所述第一软件文件替换所述本地相同所述软件文件路径对应的同名文件;和/或,所述更新客户端获取存在于所述第一版本号文件但不存在于所述第二版本号文件的第二软件文件路径,根据所述第二软件文件路径对应的第二软件文件的所述软件文件存储地址从所述更新服务端下载所述第二软件文件,将所述第二软件文件存储在本地所述第二软件文件路径的位置;或该方法包括:更新服务端通过持续集成服务监控代码管理器的代码更新状态以及获取更新的代码文件;根据所述更新的代码文件采用自动化脚本编译成可执行程序,并将所述可执行程序压缩打包得到软件的全量包;所述更新服务端将所述全量包中的所述软件文件上传到文件服务器,并且计算各个所述软件文件的所述软件文件签名值,将所述软件文件签名值、所述软件文件对应的软件文件路径及所述软件文件在所述更新服务端的软件文件存储地址写入版本号文件。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (10)

1.一种软件自动升级方法,其特征在于,包括:
更新客户端从更新服务端下载所述更新服务端最新版本的第一版本号文件以及获取本地最新版本的第二版本号文件;其中,所述第一版本号文件及所述第二版本号文件包括软件文件路径、软件文件签名值及软件文件在所述更新服务端的软件文件存储地址;
所述更新客户端将所述第一版本号文件和所述第二版本号文件中的相同所述软件文件路径对应的所述软件文件的所述软件文件签名值进行对比,获取具有相同软件文件路径但具有不同所述软件文件签名值的第一软件文件路径;所述更新客户端根据所述第一软件文件路径在所述第一版本号文件中对应的第一软件文件的所述软件文件存储地址从所述更新服务端下载所述第一软件文件,用所述第一软件文件替换所述本地相同所述软件文件路径对应的同名文件;
和/或,
所述更新客户端获取存在于所述第一版本号文件但不存在于所述第二版本号文件的第二软件文件路径,根据所述第二软件文件路径对应的第二软件文件的所述软件文件存储地址从所述更新服务端下载所述第二软件文件,将所述第二软件文件存储在本地所述第二软件文件路径的位置。
2.根据权利要求1所述的软件自动升级方法,其特征在于,在所述更新客户端从更新服务端下载所述更新服务端最新版本的第一版本号文件以及获取本地最新版本的第二版本号文件之前,所述方法还包括:
所述更新客户端向所述更新服务端发起版本更新信息获取请求,并接收所述更新服务端在接收到所述版本更新信息获取请求后发送的所述第一版本号文件的存储位置信息。
3.根据权利要求2所述的软件自动升级方法,其特征在于,所述方法还包括:在所述更新客户端接收到点击操作信息后,触发所述更新客户端向所述更新服务端发起所述版本更新信息获取请求。
4.根据权利要求1所述的软件自动升级方法,其特征在于,所述方法还包括:
将所述第一软件文件和/或所述第二软件文件对应的所述软件文件路径存储到更新列表;
根据所述更新列表计算相应所述第一软件文件和/或相应所述第二软件文件的所述软件文件签名值,并将所述第一软件文件和/或所述第二软件文件的所述软件文件签名值与所述第一版本号文件中的相同所述软件文件路径对应的同名文件的所述软件文件签名值进行比对;
若一致,则启动软件;若不一致,所述更新客户端报错。
5.一种软件自动升级方法,其特征在于,包括:
更新服务端通过持续集成服务监控代码管理器的代码更新状态以及获取更新的代码文件;根据所述更新的代码文件采用自动化脚本编译成可执行程序,并将所述可执行程序压缩打包得到软件的全量包;
所述更新服务端将所述全量包中的所述软件文件上传到文件服务器,并且计算各个所述软件文件的所述软件文件签名值,将所述软件文件签名值、所述软件文件对应的软件文件路径及所述软件文件在所述更新服务端的软件文件存储地址写入版本号文件。
6.根据权利要求5所述的软件自动升级方法,其特征在于,在所述将所述可执行程序压缩打包得到软件的全量包之后,所述方法还包括:自动更新版本号,并将更新的所述版本号赋予所述版本号文件。
7.一种更新客户端,其特征在于,包括:
版本号文件获取模块,用于:从更新服务端下载所述更新服务端最新版本的第一版本号文件以及获取本地最新版本的第二版本号文件;其中,所述第一版本号文件及所述第二版本号文件包括软件文件路径、软件文件签名值及软件文件在所述更新服务端的软件文件存储地址;
更新模块,用于:将所述第一版本号文件和所述第二版本号文件中的相同所述软件文件路径对应的所述软件文件的所述软件文件签名值进行对比,获取具有相同软件文件路径但具有不同所述软件文件签名值的第一软件文件路径;根据所述第一软件文件路径在所述第一版本号文件中对应的第一软件文件的所述软件文件存储地址从所述更新服务端下载所述第一软件文件,用所述第一软件文件替换所述本地相同所述软件文件路径对应的同名文件;
和/或,
获取存在于所述第一版本号文件但不存在于所述第二版本号文件的第二软件文件路径,根据所述第二软件文件路径对应的第二软件文件的所述软件文件存储地址从所述更新服务端下载所述第二软件文件,将所述第二软件文件存储在本地所述第二软件文件路径的位置。
8.一种更新服务端,其特征在于,包括:
全量包更新模块,用于:通过持续集成服务监控代码管理器的代码更新状态以及获取更新的代码文件;根据所述更新的代码文件采用自动化脚本编译成可执行程序,并将所述可执行程序压缩打包得到软件的全量包;
软件文件存储及版本号文件更新模块,用于:将所述全量包中的所述软件文件上传到文件服务器,并且计算各个所述软件文件的所述软件文件签名值,将所述软件文件签名值、所述软件文件对应的软件文件路径及所述软件文件的软件文件存储地址写入版本号文件。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至4任一项所述软件自动升级方法中所述更新客户端所执行的方法步骤或如权利要求5至6任一项所述软件自动升级方法中所述更新服务端所执行的方法步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至4任一项所述软件自动升级方法中所述更新客户端所执行的方法步骤或如权利要求5至6任一项所述软件自动升级方法中所述更新服务端所执行的方法步骤。
CN202110481990.5A 2021-04-30 2021-04-30 一种软件自动升级方法、更新客户端及更新服务器 Withdrawn CN113342387A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110481990.5A CN113342387A (zh) 2021-04-30 2021-04-30 一种软件自动升级方法、更新客户端及更新服务器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110481990.5A CN113342387A (zh) 2021-04-30 2021-04-30 一种软件自动升级方法、更新客户端及更新服务器

Publications (1)

Publication Number Publication Date
CN113342387A true CN113342387A (zh) 2021-09-03

Family

ID=77469319

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110481990.5A Withdrawn CN113342387A (zh) 2021-04-30 2021-04-30 一种软件自动升级方法、更新客户端及更新服务器

Country Status (1)

Country Link
CN (1) CN113342387A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114500281A (zh) * 2022-01-13 2022-05-13 上海钧正网络科技有限公司 移动端的配置系统、方法及装置
CN114697307A (zh) * 2022-02-25 2022-07-01 智己汽车科技有限公司 一种代码仓库自动同步下载的管理系统与方法
CN114942774A (zh) * 2022-07-26 2022-08-26 中恒信息科技(广州)有限公司 一种基于bim建模软件的插件功能的热更新方法
CN116069353A (zh) * 2022-11-30 2023-05-05 广州力麒智能科技有限公司 一种更新引导前置方法、装置、设备及存储介质
CN117850854A (zh) * 2023-12-15 2024-04-09 中国经济信息社有限公司 一种终端应用程序版本管理方法、系统、计算设备及介质

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114500281A (zh) * 2022-01-13 2022-05-13 上海钧正网络科技有限公司 移动端的配置系统、方法及装置
CN114697307A (zh) * 2022-02-25 2022-07-01 智己汽车科技有限公司 一种代码仓库自动同步下载的管理系统与方法
CN114697307B (zh) * 2022-02-25 2024-09-06 智己汽车科技有限公司 一种代码仓库自动同步下载的管理系统与方法
CN114942774A (zh) * 2022-07-26 2022-08-26 中恒信息科技(广州)有限公司 一种基于bim建模软件的插件功能的热更新方法
CN116069353A (zh) * 2022-11-30 2023-05-05 广州力麒智能科技有限公司 一种更新引导前置方法、装置、设备及存储介质
CN116069353B (zh) * 2022-11-30 2024-02-02 广州力麒智能科技有限公司 一种更新引导前置方法、装置、设备及存储介质
CN117850854A (zh) * 2023-12-15 2024-04-09 中国经济信息社有限公司 一种终端应用程序版本管理方法、系统、计算设备及介质

Similar Documents

Publication Publication Date Title
CN113342387A (zh) 一种软件自动升级方法、更新客户端及更新服务器
US8589909B2 (en) Techniques for reducing down time in updating applications with metadata
US8667477B2 (en) Modifying software code
CN109857423B (zh) 程序版本更新方法、装置、服务器及可读存储介质
WO2007105274A1 (ja) 適用パッチ選別装置及び適用パッチ選別方法
EP1654670A1 (en) Servicing a component-base software product
CN109753300B (zh) 一种算法升级方法、计算任务发送方法及相关装置
US9542173B2 (en) Dependency handling for software extensions
CA2860657C (en) Installation engine and package format for parallelizable, reliable installations
CN109324821B (zh) 一种自助终端系统版本管理方法
CN115480801A (zh) 一种基于Vue框架的多项目开发部署运行方法和系统
CN118170431A (zh) 跨操作系统的业务迁移方法、装置及电子设备
CN113672269B (zh) 数据处理方法、系统、电子设备及程序产品
US9477447B1 (en) Semantic representations of software extensions
CN114840226A (zh) 基于sa进行微服务升级版本的管理系统及方法
CN114721681A (zh) 配置文件更新方法、装置、设备及存储介质
US9760364B2 (en) Checks for software extensions
WO2022120640A1 (zh) 基于electron的更新方法及系统
EP3346642A1 (en) Method and device for managing network element model
US20210096838A1 (en) Firmware update with integrated smart sequence and action engine
CN115291925A (zh) 一种bmc升级方法、系统、设备及存储介质
CN112328295A (zh) 软件更新方法及装置
KR20230067257A (ko) Ai 모델 서빙 시스템 및 방법
CN112947951A (zh) 一种软件安装方法及相关设备
CN112486511A (zh) 一种通过web生成操作系统安装镜像的方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WW01 Invention patent application withdrawn after publication
WW01 Invention patent application withdrawn after publication

Application publication date: 20210903