CN111049889A - 一种静态资源上传方法、装置、集成服务器和系统 - Google Patents

一种静态资源上传方法、装置、集成服务器和系统 Download PDF

Info

Publication number
CN111049889A
CN111049889A CN201911228618.2A CN201911228618A CN111049889A CN 111049889 A CN111049889 A CN 111049889A CN 201911228618 A CN201911228618 A CN 201911228618A CN 111049889 A CN111049889 A CN 111049889A
Authority
CN
China
Prior art keywords
file
server
static resource
source code
expected
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.)
Granted
Application number
CN201911228618.2A
Other languages
English (en)
Other versions
CN111049889B (zh
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.)
CHEZHI HULIAN (BEIJING) SCIENCE & TECHNOLOGY CO LTD
Original Assignee
CHEZHI HULIAN (BEIJING) SCIENCE & 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 CHEZHI HULIAN (BEIJING) SCIENCE & TECHNOLOGY CO LTD filed Critical CHEZHI HULIAN (BEIJING) SCIENCE & TECHNOLOGY CO LTD
Priority to CN201911228618.2A priority Critical patent/CN111049889B/zh
Publication of CN111049889A publication Critical patent/CN111049889A/zh
Application granted granted Critical
Publication of CN111049889B publication Critical patent/CN111049889B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/06Protocols specially adapted for file transfer, e.g. file transfer protocol [FTP]

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种静态资源上传方法,在集成服务器中执行,该集成服务器分别与源码服务器和存储服务器通信连接,该方法包括:生成应用的源码编译包存入源码服务器中;从源码编译包的文件根目录开始遍历,采用多线程方法查找预期静态资源;对于查找到的某预期静态资源:若集成服务器开启了文件缓存校验配置,则当预期静态资源的文件值不存在于该集成服务器的缓存状态表中时,将该预期静态资源上传至存储服务器中,并在缓存状态表中另记录一条该预期静态资源的文件键值对和上传状态的对应关系。若未开启,则计算该预期静态资源在存储服务器中的URL地址,并判断存储服务器中是否已存在该预期静态资源。本发明还一并公开了对应的集成服务器和系统。

Description

一种静态资源上传方法、装置、集成服务器和系统
技术领域
本发明涉及应用开发领域,尤其涉及一种静态资源上传方法、装置、集成服务器和系统。
背景技术
Web开发领域细分有前端开发和服务端开发等。前端开发主要专注于Web页面的样式、交互效果等,而实现这些功能的脚本和样式表等通常被单独存放在.JS和.CSS文件中。另外还有些图片等作为静态文件存放在服务器上,统称为Web静态资源。用户通过浏览器访问某个网站的时候,浏览器会根据页面中这些静态资源的URL来单独发起HTTP请求。
根据静态资源的特点,比如图片文件一般比纯文本内容大很多,基于性能考虑,通常静态文件需要区别于Web站点单独部署,对应的服务器要具备大存储、高带宽等特点,而且还要方便对静态资源做CDN缓存和浏览器缓存等。在实际开发过程中,通常会把静态资源放到跟Web页面同样的域名下,使用相对路径来访问静态资源。这样在开发环境并没有问题,因为不需要考虑性能和服务器带宽等因素,并且方便调试和修改。
但是开发完成后需要将静态资源部署到服务器上,通常需要先下载已经构建好的完整的压缩包到开发人员的电脑上,然后再解压后利用工具(FTP或者其他工具),找到对应的项目目录,把解压在本地的静态资源文件逐一上传到需要部署的服务器,最后按照静态资源服务器返回的URL来修改页面上相关静态资源的路径。
该方法在实际开发过程中会占用开发人员大量时间,而且需要人为查找和判断静态资源是否要上传至统一部署服务器,容易造成疏忽遗漏、改错等现象,导致出现线上资源无法获取等问题。另外还可能存在重复上传的可能,浪费开发人员时间和服务器资源。
发明内容
鉴于上述问题,本发明提出了一种静态资源上传方法、装置、集成服务器和系统,以力图解决或者至少解决上面存在的问题。
根据本发明的一个方面,提供了一种静态资源上传方法,适于在集成服务器中执行,该集成服务器分别与源码服务器和存储服务器通信连接,该方法包括步骤:生成应用的源码编译包存入源码服务器中,该源码编译包中包括多个静态资源;从该源码编译包的文件根目录开始遍历,采用多线程方法查找预期静态资源;对于查找到的某预期静态资源:若集成服务器未开启文件缓存校验配置,则计算该预期静态资源在存储服务器中的URL地址,并通过向存储服务器发送请求来判断该存储服务器中是否已存在该预期静态资源;若集成服务器开启了文件缓存校验配置,则当所述预期静态资源的文件值不存在于该集成服务器的缓存状态表中时,将该预期静态资源上传至存储服务器中,并在所述缓存状态表中另记录一条该预期静态资源的文件关键字、文件值和上传状态的对应关系。
可选地,在根据本发明的静态资源上传方法中,文件关键字基于应用标识和文件相对路径生成,文件值为文件的加密值,上传状态包括未上传、待上传、上传中和已上传中的至少一种。
可选地,在根据本发明的静态资源上传方法中,预期静态资源的文件值不存在于该集成服务器的缓存状态表中包括:预期静态资源的文件键值对均不存在于该缓存状态表中;或者预期静态资源的文件关键字存在于该缓存状态表中,但文件值与缓存状态表中记录的文件值不相同。
可选地,在根据本发明的静态资源上传方法中,当集成服务器中开启了文件缓存校验配置时,还包括步骤:当预期静态资源的文件键值对均存在于该缓存状态表中时,跳过该预期静态资源的上传任务,并继续查找下一个预期静态资源。
可选地,在根据本发明的静态资源上传方法中,从源码编译包的文件根目录开始遍历,采用多线程方法查找符合条件的静态资源文件的步骤包括:获取文件查找的配置参数,配置参数包括指定的文件根目录、指定上传的根目录、指定文件后缀类型、以及是否开启本地文件上传校验配置中的一种或多种;基于配置参数,采用多线程方法从源码编译包的根目录中,查找具有指定文件后缀类型的文件,作为预期静态资源文件。
可选地,在根据本发明的静态资源上传方法中,若多线程为N个线程,则采用多线程方法查找预期静态资源文件的步骤包括:将该多个线程均分为两部分,该两部分线程分别对文件根目录进行正序遍历和倒序遍历;或者将该根目录中的所有文件均分为N份,每份文件对应一个线程,并分别采用该N个线程对该N份文件进行处理。
可选地,在根据本发明的静态资源上传方法中,当N=2时,将该两部分线程分别对所述文件根目录进行正序遍历和倒序遍历的步骤包括:分别用该两个线程对所述文件进行正序遍历和倒序遍历时,其中当某一线程首次查找到已加锁的静态资源文件时,终止两个线程的遍历操作。
可选地,在根据本发明的静态资源上传方法中,还包括步骤:对于查找到的某预期静态资源,判断其是否已加锁;若是,则跳过该预期静态资源的上传任务,并继续查找下一个预期静态资源;反之,则对该预期静态资源进行加锁,以防止其他线程并行访问。
可选地,在根据本发明的静态资源上传方法中,预期静态资源的加锁方式为:基于该预期静态资源的文件关键字,采用redis分布式锁功能进行加锁。
可选地,在根据本发明的静态资源上传方法中,在通过向存储服务器发送请求来判断该存储服务器中是否已存在该预期静态资源之后,还包括步骤:若存储服务器中不存在该预期静态资源,则将该预期静态资源上传到存储服务器中;反之,则跳过该预期静态资源的上传,并继续查找下一个预期静态资源。
可选地,在根据本发明的静态资源上传方法中,预期静态资源采用广度优先算法进行查找。
可选地,在根据本发明的静态资源上传方法中,还包括步骤:在完成所有预期静态资源的上传任务之后,部署应用的测试环境和线上环境,并将该源码编译包上传至网络站点的目标服务器中。
根据本发明的另一方面,提供了一种静态资源上传装置,适于驻留在集成服务器中,该集成服务器分别与源码服务器和存储服务器通信连接,该集成服务器包括;编译包生成模块,适于生成应用的源码编译包存入源码服务器中,该源码编译包中包括多个静态资源;资源查找模块,适于从源码编译包的文件根目录开始遍历,采用多线程方法查找预期静态资源;第一处理模块,适于当集成服务器未开启文件缓存校验配置时,对于查找到的某预期静态资源,计算该预期静态资源在存储服务器中的URL地址,并通过向存储服务器发送请求来判断该存储服务器中是否已存在该预期静态资源;以及第二处理模块,适于当集成服务器开启了文件缓存校验配置、且某查找到的预期静态资源的文件值不存在于该集成服务器的缓存状态表中时,将该预期静态资源上传至存储服务器中,并在缓存状态表中另记录一条该文件关键字、文件值和上传状态的对应关系。
根据本发明的另一方面,提供了一种集成服务器,包括:一个或多个处理器;存储器;以及一个或多个程序,其中一个或多个程序存储在存储器中并被配置为由一个或多个处理器执行,该一个或多个程序被处理器执行时实现如上所述的静态资源上传方法的步骤。
根据本发明的又一方面,提供了一种存储一个或多个程序的可读存储介质,该一个或多个程序包括指令,所述指令当由集成服务器执行时实现如上所述的静态资源上传方法的步骤。
根据本发明的又一方面,提供了一种静态资源上传系统,包括:如上所述的集成服务器、以及分别与该集成服务器通信连接的源码服务器和存储服务器;其中,集成服务器适于查找源码服务器中的预期静态资源,并将该预期静态资源上传到存储服务器中。
根据本发明的技术方案,提供了一种基于持续集成服务器自动上传Web静态资源文件的方法和工具,开发人员使用其通过发布系统快速发布Web应用,具有自动化、高性能和高可靠新等特性。
具体而言,开发人员无需再关心项目中静态资源的单独部署的问题,只需要在集成服务器上配置一次本发明工具,即可实现每次Web应用发包部署时自动上传项目内的web静态资源至指定服务器。而由于本发明的静态资源的上传操作是在发布系统的编译构建环节下执行的,所以本发明通过优化算法,采用多线程和利用本地文件状态缓存的方式,实现了高性能的上传性能,保证应用发包部署的效率。本发明的程序执行经过严格校验,不会出现人为操作的失误,保证Web应用的发布不出问题。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
图1示出了根据本发明一个实施例的静态资源上传系统100的结构框图;
图2示出了根据本发明一个实施例的计算设备200的结构图;
图3示出了根据本发明一个实施例的静态资源上传方法300的流程图;
图4示出了根据本发明另一个实施例的静态资源上传方法的详细流程图;
图5示出了根据本发明一个实施例的扫描根目录的示意图;以及
图6示出了根据本发明一个实施例的静态资源上传装置600的结构图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的静态资源上传系统100的示意图。如图1所示,静态资源上传系统100中包括集成服务器110、源码服务器120和存储服务器130。集成服务器110分别与源码服务器120和存储服务器130通信连接,用于将源码服务器120中的静态资源上传到存储服务器130中。
具体而言,源码服务器120中存储应用编译打包过程中生成的源码编译包,集成服务器110扫描该源码编译包的根目录,找到需要上传的静态资源文件,并将该静态资源上传到存储服务器130中。其中,集成服务器110可以为Jenkins持续集成服务器,存储服务器130可以为S3服务器,当然不限于此。
而且,这些服务器可以位于流水线发布系统中,该流水线发布系统是一套方便开发运维人员按照流水线的方式把开发完成的应用部署到服务器的系统。每个应用可以定制一个流水线,流水线可以设置为编译构建、部署测试环境和部署线上环境这样的步骤。其中,在流水线发布系统中,编译构建的工作主要由集成服务器来完成。首先在Jenkins服务器上安装本发明的静态资源自动上传工具,也就是一个可以基于执行的小程序,并在流水线系统中配置好应用的各项启动参数。
应当指出,图1中的应用测试系统100仅是示例性的,在具体的实践情况中,系统100中可以有不同数量的集成服务器110、源码服务器120和存储服务器130,本发明对系统100中所包括的各设备数量不做限制。而且,这些服务器均可以是一台单独的服务器,也可以是由若干台服务器组成的服务器集群,或者是一个云计算服务中心,用于组成服务器集群或云计算服务中心的多个服务器可以驻留在多个地理位置中,本发明对各服务器的部署方式不做限制。
根据本发明的一个实施例,上述静态资源上传系统100中的源码服务器110、集成服务器120和存储服务器130均可以通过如下所述的计算设备200来实现。图2示出了根据本发明一个实施例的计算设备200的结构框图。
在基本的配置202中,计算设备200典型地包括系统存储器206和一个或者多个处理器204。存储器总线208可以用于在处理器204和系统存储器206之间的通信。
取决于期望的配置,处理器204可以是任何类型的处理,包括但不限于:微处理器(μP)、微控制器(μC)、数字信息处理器(DSP)或者它们的任何组合。处理器204可以包括诸如一级高速缓存210和二级高速缓存212之类的一个或者多个级别的高速缓存、处理器核心214和寄存器216。示例的处理器核心214可以包括运算逻辑单元(ALU)、浮点数单元(FPU)、数字信号处理核心(DSP核心)或者它们的任何组合。示例的存储器控制器218可以与处理器204一起使用,或者在一些实现中,存储器控制器218可以是处理器204的一个内部部分。
取决于期望的配置,系统存储器206可以是任意类型的存储器,包括但不限于:易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或者它们的任何组合。系统存储器206可以包括操作系统220、一个或者多个应用222以及程序数据224。在一些实施方式中,应用222可以布置为在操作系统上利用程序数据224进行操作。程序数据224包括指令,在根据本发明的计算设备200中,程序数据224包含用于执行静态资源上传方法300的指令。
计算设备200还可以包括有助于从各种接口设备(例如,输出设备242、外设接口244和通信设备246)到基本配置202经由总线/接口控制器230的通信的接口总线240。示例的输出设备242包括图形处理单元248和音频处理单元250。它们可以被配置为有助于经由一个或者多个A/V端口252与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口244可以包括串行接口控制器254和并行接口控制器256,它们可以被配置为有助于经由一个或者多个I/O端口258和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备246可以包括网络控制器260,其可以被布置为便于经由一个或者多个通信端口264与一个或者多个其他计算设备262通过网络通信链路的通信。
网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(RF)、微波、红外(IR)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。
计算设备200可以实现为服务器,例如文件服务器、数据库服务器、应用程序服务器和WEB服务器等,也可以实现为小尺寸便携(或者移动)电子设备的一部分,这些电子设备可以是诸如蜂窝电话、个人数字助理(PDA)、无线网络浏览设备、应用专用设备、或者可以包括上面任何功能的混合设备。计算设备200还可以实现为包括桌面计算机和笔记本计算机配置的个人计算机。在一些实施例中,计算设备200被配置为执行静态资源上传方法300。
图3示出了根据本发明一个实施例的静态资源上传方法300的流程示意图。方法300在集成服务器中执行,如在集成服务器120中执行,以便向存储服务器中上传源码编译包中的静态资源。
图4示出了该静态资源上传的详细流程图,以下将结合图4,对图3中的静态资源上传方法300进行详述。如图3所示,该方法始于步骤S310。
在步骤S310中,生成应用的源码编译包存入源码服务器中,该源码编译包中包括多个静态资源。
如前文所述,Jenkins服务器上安装本发明的静态资源自动上传的程序工具,能够实现静态资源在编译环境下自动上传。Jenkins开始构建后,首先要编译打包,即通过编译工具把源代码编译,并通过命令行设置各项配置参数。生成目标文件后,将该目标文件打进目标系统所需的包文件中。例如对于一个Java Web项目,则编译打包后生成的包文件为app.war。源码编译包所存储的设备称为源码服务器。完成项目的编译打包后,执行静态资源的自动上传工具,然后等待自动上传工具执行完毕后,继续进行后续的部署测试环境和线上环境的操作。
自动上传工具在开始执行时,首先会获取预设的各项配置参数,该配置参数包括指定的源码编译包的文件根目录(root目录)、指定上传的根目录(也就是上传到存储服务器中的目录,target root)、指定文件后缀类型、以及是否开启本地文件上传校验配置中的一种或多种。其中,源码编译包的文件根目录也就是源码编译包在源码服务器中存储的根目录,图5示出了一个示例root目录结构。指定文件后缀类型一般指页面中静态资源的文件类型,例如包括file、exts、png、jpg、jpeg、gif、bmp中的一种或多种。
各配置参数的示例如下:
Usage:autohome-s3-uploader[options]
Options:
-r,--root[value]指定上传的文件根目录
-tr,--target-root[value]指定在目标服务器上的根目录
-f,--file-exts,指定扫描的文件类型后缀
-e,--enable-cache是否启用本地缓存文件状态(默认启用)。
执行命令示例:autohome-s3-uploader-r{root}-tr{target-root}-f{file-exts}-e{enable-cache},假设在{root}中存在图片/images/logo.png,那么最终的访问URL是:xxx.autohome.com.cn/{target-root}/images/logo.png。
这里可以先判断参数是否设置正确,如根据-r{root}获取到的参数,检查所要扫描的文件包是否包含该路径,如果不包含则返回错误。如果有参数设置不正确,则直接返回上传失败,通知Jenkins构建失败并通知用户,以便用户检查并修正各项参数。
随后,在步骤S320中,从源码编译包的文件根目录开始遍历,采用多线程方法查找预期静态资源。
根据一个实施例,可以根据以下步骤查找静态资源:获取文件查找的配置参数,并基于该配置参数,采用多线程方法从所述源码编译包的根目录中,查找具有指定文件后缀类型的文件,作为该预期静态资源文件。自动上传工具根据指定的root目录(-r参数指定)来扫描文件目录,查找符合条件(文件后缀包含在-f指定的参数中)的静态资源文件。
另外,本发明预期静态资源可以采用广度优先算法进行查找。为提高查找文件的效率,本发明采用同时开启多线程的方式执行,其中充分考虑线程间通信和资源冲突等问题,避免产生各种异常后果。其中,每个线程在执行时,对于查找到的某预期静态资源,都先判断其是否已加锁;若是,则跳过该预期静态资源的上传任务,并继续查找下一个预期静态资源;反之,则对该预期静态资源进行加锁,以防止其他线程并行访问。
这里,在进行文件加锁时,可以基于该预期静态资源的文件关键字(文件key),采用redis分布式锁功能进行加锁。该文件关键字基于应用标识appid和文件相对路径生成,例如可以用应用标识+相对路径来表示。如appidxxx/root/images/1.jpg就是一个文件关键字。redis分布式锁是比较成熟的技术,可以采用现有方法实现,本发明对此不作限制。
当采用N个线程来查找静态资源时,可以将该多个线程均分为两部分,该两部分线程分别对文件根目录进行正序遍历和倒序遍历。例如,若有八个线程,则四个线程正序遍历,另外四个线程倒序遍历。进行正序遍历的四个线程同时查找预期静态资源,先找到的线程将该预期静态资源上锁后上传,其他线程再查找到该预期静态资源时,会跳过该线程,继续查找下一个预期静态资源。
若N为偶数,则划分的两部分线程均为N/2个。若N为奇数,则可以基于各线程的整体数据处理能力,将线程划分为(N-1)/2个和(N+1)/2,其中线程较少的那部分整体数据处理能力较强。最后划分出的两部分线程,其数据处理能力近似相当,保证两部分能同时完全遍历任务。
或者,也可以将该根目录中的所有文件均分为N份,每份文件对应一个线程,并分别采用该N个线程对该N份文件进行处理。例如,若有八个线程,则可以将根目录中的所有文件均分为八份,每份都由一个线程来单独处理。
当采用两个线程(N=2)来查找资源时,可以分别用该两个线程对文件进行正序遍历和倒序遍历时。当某一线程首次查找到已加锁的静态资源文件时,终止两个线程的遍历操作,此时代表两个线程已经遍历完了整个根目录文件。
随后,在步骤S330中,对于查找到的某预期静态资源,若集成服务器未开启文件缓存校验配置,则计算该预期静态资源在存储服务器中的URL地址,并通过向存储服务器发送请求来判断该存储服务器中是否已存在该预期静态资源。其中,若存储服务器中不存在该预期静态资源,则将该预期静态资源上传到存储服务器中;反之,则跳过该预期静态资源的上传任务,并继续查找下一个预期静态资源。
文件缓存校验配置的开启在配置参数中-e,--enable-cache设定,未开启时,每次文件上传之前都要通过http请求的方式来判断是否已存在,一般当上传任务量较小时可不开启该文件缓存校验。应当理解的是,本领域技术人员可以自行选择URL地址的计算方法,本发明对此不作限制,如采用上述基于域名和{root}的生成规则进行计算。
随后,在步骤S340中,对于查找到的某预期静态资源,若集成服务器开启了文件缓存校验配置,则当预期静态资源的文件值不存在于该集成服务器的缓存状态表中时,将该预期静态资源上传至存储服务器中,并在缓存状态表中另记录一条该预期静态资源的文件关键字、文件值和上传状态的对应关系。
其中,预期静态资源的文件值不存在于该集成服务器的缓存状态表中包括:预期静态资源的文件键值对均不存在于该缓存状态表中;或者预期静态资源的文件关键字存在于该缓存状态表中,但文件值与缓存状态表中记录的文件值不相同。
另外,在步骤S340中,若集成服务器开启了文件缓存校验配置,则当预期静态资源的文件键值对均存在于该缓存状态表中时,跳过该预期静态资源的上传任务,并继续查找下一个预期静态资源。
这里,当开启了文件缓存校验配置时,可以减少http请求的耗时操作。由于系统采用多线程查询,因此本发明在集成服务器中设置一个全局的、线程安全的HashMap类型的变量缓存状态表,用于存储每个已上传文件的文件键值对和上传状态。其中,value文件键值对包括文件关键字(key)和文件值(value),文件key作为字典对象的key,文件值为文件的加密值,如文件MD5哈希值(字符串变量fileMd5Hash)等。上传状态包括未上传、待上传、上传中和已上传中的至少一种。
因此,对于某个查找到的静态资源文件,首先要根据缓存状态表判断之前是否已经上传过。多线程之间可通过该HashMap对象,获取到该文件的Md5哈希值,如果跟当前包文件中的数值一致,则表示已上传,否则,表示未上传。
具体而言,若文件状态表中有该文件关键字,但状态表中的文件值与该文件的当前实际文件值不相同,则代表该文件已进行了更新,需要再上传一次,并另外记录一条该上传记录。此时,缓存状态表中的该文件关键字有两个对应的文件值,代表两个文件,之后如果想在其他网页中再次部署这两个文件,则可以分别在缓存状态表中进行查询。
若文件状态表中没有该文件关键字,自然也不会有该文件值,代表该文件之前未被上传过,需要进行上传,并记录该上传记录。
若文件状态表中同时有该文件关键字和当前文件的文件值,代表该文件已被上传过,不用再进行上传,继续查找下一个预期静态资源即可。
根据本发明的一个实施例,在步骤S340之后,还可以包括步骤:在完成所有预期静态资源的上传任务之后,部署应用的测试环境和线上环境,并将该源码编译包上传至网络站点的目标服务器中。
完成一个文件的上传后,继续查找并上传下一个文件。如果遍历完成,找不到符合条件的文件,则结束查找。完成所有上传任务,记录本次执行的数据结果到日志系统,该数据结果包括执行上传的文件个数、文件大小和执行总时长等。最后返回Jenkins服务中完成后续的编译构建工作。
如前文所述,传统方式的静态资源的上传,需要下载解压后再逐一查找上传,假设项目中有200个静态资源文件,手工查找并执行一个文件上传估计平均时间为20秒。这样完成一次部署操作,单单花费在上传文件上的时间会超过1个小时。而采用本申请的方案,可以多线程优化查找算法可大大提升文件的查找效率,采用本地缓存文件的上传记录方法,可减少网络请求次数,大大提升了文件上传效率。经过上述查找和上传执行效率的提升,本发明可以在5分钟内完成200个文件的上传,并且不需要人工操作,避免出现各种人为疏漏,提高上传准确率。
图6示出了根据本发明一个实施例的静态资源的上传装置600的结构框图,可以驻留在集成服务器120中。如图6所示,装置600包括:编译包生成模块610、资源查找模块620、第一处理模块630和第二处理模块640。
编译包生成模块610生成应用的源码编译包存入源码服务器中,该源码编译包中包括多个静态资源。编译包生成模块610可以进行与上面在步骤S310中描述的处理相对应的处理,这里不再展开赘述。
资源查找模块620从源码编译包的文件根目录开始遍历,采用多线程方法查找预期静态资源。
根据一个实施例,资源查找模块620可以获取文件查找的配置参数,并基于该配置参数,采用多线程方法从所述源码编译包的根目录中,查找具有指定文件后缀类型的文件,作为预期静态资源文件。
根据另一个实施例,资源查找模块620可以将多个线程均分为两部分,该两部分线程分别对文件根目录进行正序遍历和倒序遍历。或者,资源查找模块620可以将该根目录中的所有文件均分为N份,每份文件对应一个线程,并分别采用该N个线程对该N份文件进行处理。当N=2时,资源查找模块620可以分别用该两个线程对文件进行正序遍历和倒序遍历时,其中当某一线程首次查找到已加锁的静态资源文件时,终止两个线程的遍历操作。
此外,对于查找到的某预期静态资源,资源查找模块620还可以判断其是否已加锁;若是,则跳过该预期静态资源的上传任务,并继续查找下一个预期静态资源;反之,则对该预期静态资源进行加锁,以防止其他线程并行访问。资源查找模块620可以进行与上面在步骤S320中描述的处理相对应的处理,这里不再展开赘述。
第一处理模块630当集成服务器未开启文件缓存校验配置时,对于查找到的某预期静态资源,计算该预期静态资源在存储服务器中的URL地址,并通过向所述存储服务器发送请求来判断该存储服务器中是否已存在该预期静态资源。其中,若存储服务器中不存在该预期静态资源,则将该预期静态资源上传到存储服务器中;反之,则跳过该预期静态资源的上传任务,并继续查找下一个预期静态资源。第一处理模块630可以进行与上面在步骤S330中描述的处理相对应的处理,这里不再展开赘述。
第二处理模块640当集成服务器开启了文件缓存校验配置、且某查找到的预期静态资源的文件值不存在于该集成服务器的缓存状态表中时,将该预期静态资源上传至存储服务器中,并在所述缓存状态表中另记录一条该文件关键字、文件值和上传状态的对应关系。第二处理模块640可以进行与上面在步骤S340中描述的处理相对应的处理,这里不再展开赘述。
根据一个实施例,第二处理模块640还可以当集成服务器中开启了文件缓存校验配置、且当预期静态资源的文件键值对均存在于该缓存状态表中时,跳过该预期静态资源的上传任务,并继续查找下一个预期静态资源。
根据本发明的一个实施例,装置600还可以包括编译包上传模块(图中未示出),适于在完成所有预期静态资源的上传任务之后,部署应用的测试环境和线上环境,并将该源码编译包上传至网络站点的目标服务器中。
根据本发明的技术方案,高性能的完成了web应用项目在部署期间上传静态资源文件至服务器的方法,大大减少了开发人员花费在非业务需求上的工作时间,开发人员可以更专注在那些重要的程序开发等工作上,显著提升了工作效率。并且,程序执行的可靠性要远高于人为执行,可以减少工作失误带来的不良后果。
具体而言,在静态资源的查找过程中,采用多线程同时遍历文件目录,大大加速文件查找速度的方法。在静态资源的上传过程中,采用本地缓存的方式记录已上传过的文件键值对和上传状态,以便下次上传时直接在本地过滤掉不需要上传的文件,不再需要向服务器发送http验证请求,从而提高整个上传过程的速度。
A7、如A6所述的方法,其中,当N=2时,所述将该两部分线程分别对所述文件根目录进行正序遍历和倒序遍历的步骤包括:分别用该两个线程对所述文件进行正序遍历和倒序遍历时,其中当某一线程首次查找到已加锁的静态资源文件时,终止两个线程的遍历操作。A8、如A1-A7中任一项所述的方法,还包括步骤:对于查找到的某预期静态资源,判断其是否已加锁;若是,则跳过该预期静态资源的上传任务,并继续查找下一个预期静态资源;反之,则对该预期静态资源进行加锁,以防止其他线程并行访问。A9、如A8所述的方法,其中,所述预期静态资源的加锁方式为:基于该预期静态资源的文件关键字,采用redis分布式锁功能进行加锁。
A10、如A1-A9中任一项所述的方法,其中,在通过向所述存储服务器发送请求来判断该存储服务器中是否已存在该预期静态资源之后,还包括步骤:若所述存储服务器中不存在该预期静态资源,则将该预期静态资源上传到存储服务器中;反之,则跳过该文件的上传,并继续查找下一个预期静态资源。A11、如A1-A10中任一项所述的方法,其中,所述预期静态资源采用广度优先算法进行查找。A12、如A1-A11中任一项所述的方法,还包括步骤:在完成所有预期静态资源的上传任务之后,部署应用的测试环境和线上环境,并将该源码编译包上传至网络站点的目标服务器中。
这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、U盘、软盘、CD-ROM或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。
在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的静态资源上传方法。
以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。
在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的而非限制性的,本发明的范围由所附权利要求书限定。

Claims (10)

1.一种静态资源上传方法,适于在集成服务器中执行,所述集成服务器分别与源码服务器和存储服务器通信连接,所述方法包括步骤:
生成应用的源码编译包存入源码服务器中,所述源码编译包中包括多个静态资源;
从所述源码编译包的文件根目录开始遍历,采用多线程方法查找预期静态资源;
对于查找到的某预期静态资源:
若所述集成服务器未开启文件缓存校验配置,则计算该预期静态资源在存储服务器中的URL地址,并通过向所述存储服务器发送请求来判断该存储服务器中是否已存在该预期静态资源;
若所述集成服务器开启了文件缓存校验配置,则当所述预期静态资源的文件值不存在于该集成服务器的缓存状态表中时,将该预期静态资源上传至存储服务器中,并在所述缓存状态表中另记录一条该预期静态资源的文件关键字、文件值和上传状态的对应关系。
2.如权利要求1所述的方法,其中,所述文件关键字基于应用标识和文件相对路径生成,所述文件值为文件的加密值,所述上传状态包括未上传、待上传、上传中和已上传中的至少一种。
3.如权利要求1所述的方法,其中,所述预期静态资源的文件值不存在于该集成服务器的缓存状态表中包括:
所述预期静态资源的文件键值对均不存在于该缓存状态表中;或者
所述预期静态资源的文件关键字存在于该缓存状态表中,但文件值与缓存状态表中记录的文件值不相同。
4.如权利要求1-3中任一项所述的方法,还包括步骤:
如果所述集成服务器中开启了文件缓存校验配置,则当所述预期静态资源的文件键值对均存在于该缓存状态表中时,跳过该预期静态资源的上传任务,并继续查找下一个预期静态资源。
5.如权利要求1-4中任一项所述的方法,其中,所述从所述源码编译包的文件根目录开始遍历,采用多线程方法查找符合条件的静态资源文件的步骤包括:
获取文件查找的配置参数,所述配置参数包括指定的所述文件根目录、指定上传的根目录、指定文件后缀类型、以及是否开启本地文件上传校验配置中的一种或多种;
基于所述配置参数,采用多线程方法从所述源码编译包的根目录中,查找具有指定文件后缀类型的文件,作为所述预期静态资源文件。
6.如权利要求1-5中任一项所述的方法,其中,若所述多线程为N个线程,则所述采用多线程方法查找预期静态资源文件的步骤包括:
将该多个线程均分为两部分,该两部分线程分别对所述文件根目录进行正序遍历和倒序遍历;或者
将该根目录中的所有文件均分为N份,每份文件对应一个线程,并分别采用该N个线程对该N份文件进行处理。
7.一种静态资源上传装置,适于驻留在集成服务器中,所述集成服务器分别与源码服务器和存储服务器通信连接,所述集成服务器包括;
编译包生成模块,适于生成应用的源码编译包存入源码服务器中,所述源码编译包中包括多个静态资源;
资源查找模块,适于从所述源码编译包的文件根目录开始遍历,采用多线程方法查找预期静态资源;
第一处理模块,适于当所述集成服务器未开启文件缓存校验配置时,对于查找到的某预期静态资源,计算该预期静态资源在存储服务器中的URL地址,并通过向所述存储服务器发送请求来判断该存储服务器中是否已存在该预期静态资源;以及
第二处理模块,适于当所述集成服务器开启了文件缓存校验配置、且某查找到的预期静态资源的文件值不存在于该集成服务器的缓存状态表中时,将该预期静态资源上传至存储服务器中,并在所述缓存状态表中另记录一条该文件关键字、文件值和上传状态的对应关系。
8.一种集成服务器,包括:
至少一个处理器;以及
包括计算机程序指令的至少一个存储器;
所述至少一个存储器和所述计算机程序指令被配置为与所述至少一个处理器一起使得所述集成服务器执行如权利要求1-6中任一项所述的方法。
9.一种存储一个或多个程序的可读存储介质,所述一个或多个程序包括指令,所述指令当由集成服务器执行时,使得所述集成服务器执行如权利要求1-6中任一项所述的方法。
10.一种静态资源上传系统,包括:
如权利要求8所述的集成服务器、以及分别与所述集成服务器通信连接的源码服务器和存储服务器;
其中,所述集成服务器适于查找所述源码服务器中的预期静态资源,并将该预期静态资源上传到所述存储服务器中。
CN201911228618.2A 2019-12-04 2019-12-04 一种静态资源上传方法、装置、集成服务器和系统 Active CN111049889B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911228618.2A CN111049889B (zh) 2019-12-04 2019-12-04 一种静态资源上传方法、装置、集成服务器和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911228618.2A CN111049889B (zh) 2019-12-04 2019-12-04 一种静态资源上传方法、装置、集成服务器和系统

Publications (2)

Publication Number Publication Date
CN111049889A true CN111049889A (zh) 2020-04-21
CN111049889B CN111049889B (zh) 2022-07-08

Family

ID=70234592

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911228618.2A Active CN111049889B (zh) 2019-12-04 2019-12-04 一种静态资源上传方法、装置、集成服务器和系统

Country Status (1)

Country Link
CN (1) CN111049889B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112149035A (zh) * 2020-09-23 2020-12-29 网易(杭州)网络有限公司 网站静态资源处理方法及装置
CN112988160A (zh) * 2021-03-15 2021-06-18 深圳市慧为智能科技股份有限公司 服务器编译方法、装置、设备及计算机可读存储介质
CN113835613A (zh) * 2020-06-24 2021-12-24 浙江宇视科技有限公司 一种文件读取方法、装置、电子设备和存储介质
CN116760811A (zh) * 2023-08-16 2023-09-15 中移(苏州)软件技术有限公司 Http数据处理方法、装置和可读存储介质

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120036457A1 (en) * 2010-08-09 2012-02-09 REAL Software, Inc. Integrated development environment for rapid application development
CN102480494A (zh) * 2010-11-23 2012-05-30 金蝶软件(中国)有限公司 一种文件更新的方法、装置及系统
CN103279373A (zh) * 2013-05-31 2013-09-04 广州市动景计算机科技有限公司 浏览器外壳功能的更新方法及装置
US20150201033A1 (en) * 2014-01-10 2015-07-16 Facebook. Inc. Content specific router caching
WO2018046084A1 (en) * 2016-09-08 2018-03-15 Huawei Technologies Co., Ltd. Systems and methods for managing an ordered list data structure
CN108416029A (zh) * 2018-03-09 2018-08-17 深圳市富途网络科技有限公司 一种静态资源更新方法及系统
CN108418717A (zh) * 2018-03-02 2018-08-17 平安科技(深圳)有限公司 安卓应用打包上传方法、装置、计算机设备及存储介质
CN110377274A (zh) * 2019-07-08 2019-10-25 紫光云技术有限公司 基于Single-Spa的微前端架构系统及开发、部署方法
CN110532189A (zh) * 2019-07-18 2019-12-03 中国人民财产保险股份有限公司 一种持续集成系统、方法及装置

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120036457A1 (en) * 2010-08-09 2012-02-09 REAL Software, Inc. Integrated development environment for rapid application development
CN102480494A (zh) * 2010-11-23 2012-05-30 金蝶软件(中国)有限公司 一种文件更新的方法、装置及系统
CN103279373A (zh) * 2013-05-31 2013-09-04 广州市动景计算机科技有限公司 浏览器外壳功能的更新方法及装置
US20150201033A1 (en) * 2014-01-10 2015-07-16 Facebook. Inc. Content specific router caching
WO2018046084A1 (en) * 2016-09-08 2018-03-15 Huawei Technologies Co., Ltd. Systems and methods for managing an ordered list data structure
CN108418717A (zh) * 2018-03-02 2018-08-17 平安科技(深圳)有限公司 安卓应用打包上传方法、装置、计算机设备及存储介质
CN108416029A (zh) * 2018-03-09 2018-08-17 深圳市富途网络科技有限公司 一种静态资源更新方法及系统
CN110377274A (zh) * 2019-07-08 2019-10-25 紫光云技术有限公司 基于Single-Spa的微前端架构系统及开发、部署方法
CN110532189A (zh) * 2019-07-18 2019-12-03 中国人民财产保险股份有限公司 一种持续集成系统、方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
陈清: "面向前端框架开发的持续集成方案的研究与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》 *

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113835613A (zh) * 2020-06-24 2021-12-24 浙江宇视科技有限公司 一种文件读取方法、装置、电子设备和存储介质
CN113835613B (zh) * 2020-06-24 2024-03-29 浙江宇视科技有限公司 一种文件读取方法、装置、电子设备和存储介质
CN112149035A (zh) * 2020-09-23 2020-12-29 网易(杭州)网络有限公司 网站静态资源处理方法及装置
CN112988160A (zh) * 2021-03-15 2021-06-18 深圳市慧为智能科技股份有限公司 服务器编译方法、装置、设备及计算机可读存储介质
CN112988160B (zh) * 2021-03-15 2022-04-19 深圳市慧为智能科技股份有限公司 服务器编译方法、装置、设备及计算机可读存储介质
CN116760811A (zh) * 2023-08-16 2023-09-15 中移(苏州)软件技术有限公司 Http数据处理方法、装置和可读存储介质
CN116760811B (zh) * 2023-08-16 2023-11-03 中移(苏州)软件技术有限公司 Http数据处理方法、装置和可读存储介质

Also Published As

Publication number Publication date
CN111049889B (zh) 2022-07-08

Similar Documents

Publication Publication Date Title
CN111049889B (zh) 一种静态资源上传方法、装置、集成服务器和系统
US10824404B2 (en) Methods and systems for uploading a program based on a target network platform
CN109508178B (zh) 一种程序开发方法及装置
US10366112B2 (en) Compiling extract, transform, and load job test data cases
US10282502B1 (en) Flexible constraint integrated circuit implementation runs
CN112395039B (zh) 一种Kubernetes集群的管理方法和装置
CN112947976B (zh) 一种操作系统升级方法、计算设备及存储介质
Tan et al. Hadoop framework: impact of data organization on performance
CN111427579A (zh) 插件、应用程序实现方法及系统和计算机系统及存储介质
US8407713B2 (en) Infrastructure of data summarization including light programs and helper steps
US10268461B2 (en) Global data flow optimization for machine learning programs
CN114721922B (zh) 一种服务器集群的性能评估方法、计算设备及存储介质
RU2634224C2 (ru) Система и способ и постоянный машиночитаемый носитель дублирования файлов на клиентском устройстве для облачного хранилища
US20100312865A1 (en) Asynchronous update of virtualized applications
CN113485712B (zh) 一种内核裁剪方法及计算设备
US9158550B2 (en) Caching based operating system installation
US20200133639A1 (en) Client-side source code dependency resolution in language server protocol-enabled language server
CN115391275A (zh) 三维虚拟场景的构建方法、装置、电子设备及存储介质
CN114879978A (zh) 软件包依赖关系的处理方法、计算设备及可读存储介质
US8359456B2 (en) Generating random addresses for verification of distributed computerized devices
US10120968B1 (en) System and method for hierarchical library searching
CN111400243A (zh) 基于流水线服务的研发管理系统以及文件存储方法、装置
US20240127148A1 (en) Delta based task analysis for ci systems
CN117934259B (zh) 任务流程图的生成方法、电子设备和存储介质
US11983525B2 (en) Automated container size reduction

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
GR01 Patent grant
GR01 Patent grant