CN111176654B - 一种基于多用户缓存的物联网应用在线编译方法 - Google Patents
一种基于多用户缓存的物联网应用在线编译方法 Download PDFInfo
- Publication number
- CN111176654B CN111176654B CN201911128284.1A CN201911128284A CN111176654B CN 111176654 B CN111176654 B CN 111176654B CN 201911128284 A CN201911128284 A CN 201911128284A CN 111176654 B CN111176654 B CN 111176654B
- Authority
- CN
- China
- Prior art keywords
- file
- compiling
- compiled
- hash value
- compilation
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/441—Register allocation; Assignment of physical memory space to logical memory space
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
一种基于多用户缓存的物联网应用在线编译方法。步骤为:开发者首先在客户端编写物联网应用代码,并将代码上传至编译服务器。服务器对应用代码中的每一个源文件进行编译。在编译前,首先计算文件的哈希值,并在数据库中查找该哈希值对应的目标文件。若目标文件存在,则拷贝该文件到当前目录,并进行下一个文件的编译;否则,编译当前文件,并把编译后的文件存储到存储器中,以便后续编译过程复用该目标文件。将所有源文件编译完成后,将编译后的结果返回给客户端,编译完成。
Description
技术领域
本发明涉及一种基于多用户缓存的物联网应用在线编译方法。
背景技术
随着物联网技术的发展,大量物联网设备涌现出来。据预测,到2020年,全球将有500亿物联网设备。随着物联网设备的增加,物联网应用的规模以及复杂性也越来越高。目前,传统的物联网应用开发方式需要开发者在本地安装开发板驱动以及对应的开发环境,应用编译过程在本地执行。这种方式主要存在两个问题:一是物联网设备异构性强,存在多种类型的开发板,如ESP32-DevKitC、STM32 Nucleo、Arduino Mega等。对于开发者,使用不同的开发板需要安装配置相对应的设备驱动、开发环境以及编译工具,费时费力,造成开发时间上的浪费;二是随着物联网的发展,设备端应用复杂性以及规模不断提高,应用编译所需的计算资源越来越多,导致其编译时间越来越长,降低了应用的开发效率。
物联网应用在线开发平台将物联网应用的开发从线下搬到了线上,为开发者提供统一的在线代码编辑以及云端编译环境。基于物联网应用在线开发平台,开发者无需在本地完成繁琐的配置,只需要一台装有浏览器的电脑即可完成物联网应用的开发,用户不需要在本地安装开发环境、编译工具以及设备驱动,极大提高了开发效率。此外,基于在线编译的方式,云端计算资源可以根据需求实时扩展,相比于本地编译,极大降低了编译所需时间。目前,市场上已经出现了一些基于Web的物联网应用在线开发平台。如Arduino WebEditor、Mbed Online Compiler等,在一定程度上提高了物联网应用的开发效率。但是,上述工具主要存在以下两点缺陷:一是支持的设备类型受限,以Arduino Web Editor为例,目前,其只支持Arduino系列设备,其他类型的设备,如ESP32-DevKitC、STM32 Nucleo等无法使用Arduino Web Editor进行开发,导致系统的兼容性较差;二是此类在线编译器没有针对多用户在线编译进行速度上的优化。目前,在线编译系统普遍针对每个用户的项目文件进行分别编译,每一次编译都需要对整个项目所有文件重新进行编译,无法利用多用户的中间编译结果,导致其所需编译时间较长,实际的用户体验较差。
总的来看,相比于目前已有的物联网在线编译系统,基于多用户缓存的物联网应用在线编译方法通过缓存并重用多用户的中间编译结果,可以更好的利用云端在线编译服务器的计算资源,简化物联网应用开发环境配置,加快应用编译执行过程,降低编译所需要的时间,提高物联网应用开发效率。
发明内容
本发明要克服现有技术的上述缺点,提供了一种基于多用户缓存的物联网应用在线编译方法。
本发明的目的是利用在线开发环境以及多用户缓存技术,简化物联网应用开发环境配置过程,通过重用多用户的中间编译结果,降低物联网应用编译所需时间,从而提高物联网应用开发效率。
为实现以上目的,本发明所采取的技术方案是:一种基于多用户缓存的物联网应用在线编译方法,该方法包括以下步骤。
步骤1:开发者在客户端基于在线的Web IDE编写物联网应用代码,并将代码文件压缩上传至编译服务器。
步骤2:编译服务器获取用户上传的待编译物联网应用代码,并将代码文件解压。
步骤3:编译服务器计算用户上传代码的哈希值,并在数据库中查找该哈希值,找到该哈希值对应的编译文件。若该哈希值在数据库中,说明该应用之前已经编译过,则将编译文件作为编译结果返回,结束编译过程;若该哈希值不在数据库中,则将待编译物联网应用代码存储至存储器,并将文件哈希值存储在数据库中,继续下述步骤。
步骤4:对待编译物联网应用代码中的每一个源文件进行编译。在编译前,首先计算该文件的哈希值,并在数据库中查找该哈希值对应的目标文件。若目标文件存在,则拷贝该文件到当前目录,并进行下一个文件的编译;否则,编译当前文件,并把编译后的文件存储到存储器中。
步骤5:若存储器空间已满,则采用相应的文件替换策略,删除相应的文件。为了减少文件替换次数,每次缓存的文件大小达到阈值时,我们采用相应的文件替换策略,将缓存的文件大小降低至阈值的80%。
步骤6:如果编译成功,将编译后的文件存储到缓存空间,并将编译后的文件以及编译成功信息返回给用户;否则,将编译错误信息返回给用户。该次编译过程完成。
本发明的有益效果是:通过引入在线编译环境,以及多用户缓存,简化物联网应用开发环境配置过程,降低物联网应用编译所需时间,从而提高物联网应用开发效率。
附图说明
为了更清楚地说明本发明实例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是实施本发明方法的系统架构图。
图2是本发明方法的工作流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明的保护范围。
本发明实施例提供了一种基于多用户缓存的物联网应用在线编译方法,具体可应用于本发明提供的一种基于多用户缓存的物联网应用在线编译系统,该系统包括编译服务器以及能够与所述编译服务器直接通信的存储器以及客户端。在此系统中,编译服务器优选使用云服务器,存储器优选使用服务器内置的固态硬盘,客户端使用普通桌面计算机即可。
基于上述系统,本发明实施例提供了基于多用户缓存的物联网应用在线编译方法,其工作流程图如图2所示,具体包括以下步骤:
步骤1:用户在客户端编写物联网应用代码,客户端以ZIP形式对应用代码进行压缩,指定代码编译方式并将压缩后的文件上传至编译服务器。客户端和服务器通过HTTP协议进行通信。
步骤2:编译服务器获取用户上传的待编译物联网应用代码,该应用代码由一个或多个文件组成,采用ZIP格式进行压缩。
步骤3:编译服务器计算用户上传代码的哈希值,并在数据库中查找该哈希值,找到该哈希值对应的编译文件。根据查找结果的不同,分别进行如下两种处理。
(3.1)若该哈希值在数据库中,说明该应用之前已经编译过。在数据库中查找该哈希值所对应的编译文件路径,将该编译文件作为编译结果返回,结束编译过程;
(3.2)若该哈希值不在数据库中,说明该应用之前没有被编译过。将待编译物联网应用代码存储至存储器,并将项目压缩文件的哈希值插入到数据库中,继续下述步骤。
步骤4:对于待编译物联网应用代码中的每一个源文件进行编译。在编译前,首先计算该文件的哈希值,在本系统实现中,我们使用文件的MD5码作为文件的哈希值。然后,在数据库中查找该哈希值对应的目标文件。根据目标文件是否存在,分别进行如下两种处理。
(4.1)若目标文件存在,则拷贝该目标文件到当前编译目录,跳过当前文件的编译,进行下一个文件的编译;
(4.2)若目标文件不存在,则按照客户端指定的编译方式编译当前源文件,把源文件哈希值及目标文件路径存储到数据库中,把编译后的文件存储到存储器中。具体的编译方式可以使用GCC等开源编译工具,本发明对此不再详细描述。
步骤5:若存储器空间已满,则采用最近最少使用替换策略(LRU),选择最近最久未使用的目标文件,删除对应的数据库记录以及目标文件。为了减少文件替换次数,每次删除文件,我们基于LRU算法,选择20%的目标文件进行删除。上述文件替换策略以及删除的文件数量只是提供一种优选的实现方式,具体的策略选取以及参数取值可以根据实际需要自行设置,本发明对此不做限制。
步骤6:若应用编译成功,则将编译后的文件放入存储器,并将编译结果返回给客户端;否则,将编译错误信息返回给客户端,一次编译过程完成。
本说明书实施例所述的内容仅仅是对发明构思的实现形式的列举,本发明的保护范围不应当被视为仅限于实施例所陈述的具体形式,本发明的保护范围也及于本领域技术人员根据本发明构思所能够想到的等同技术手段。
Claims (3)
1.一种基于多用户缓存的物联网应用在线编译方法,包括以下步骤:
步骤1:用户在客户端编写物联网应用代码,客户端以ZIP形式对应用代码进行压缩,指定代码编译方式并将压缩后的文件上传至编译服务器;客户端和服务器通过HTTP协议进行通信;
步骤2:编译服务器获取用户上传的待编译物联网应用代码,该应用代码由一个或多个文件组成,采用ZIP格式进行压缩;
步骤3:编译服务器计算用户上传代码的哈希值,并在数据库中查找该哈希值,找到该哈希值对应的编译文件;根据查找结果的不同,分别进行如下两种处理;
3.1:若该哈希值在数据库中,说明该应用之前已经编译过;在数据库中查找该哈希值所对应的编译文件路径,将该编译文件作为编译结果返回,结束编译过程;
3.2:若该哈希值不在数据库中,说明该应用之前没有被编译过;将待编译物联网应用代码存储至存储器,并将项目压缩文件的哈希值插入到数据库中,继续下述步骤;
步骤4:对于待编译物联网应用代码中的每一个源文件进行编译;在编译前,首先计算该文件的哈希值,使用文件的MD5码作为文件的哈希值;然后,在数据库中查找该哈希值对应的目标文件;根据目标文件是否存在,分别进行如下两种处理;
4.1:若目标文件存在,则拷贝该目标文件到当前编译目录,跳过当前文件的编译,进行下一个文件的编译;
4.2:若目标文件不存在,则按照客户端指定的编译方式编译当前源文件,把源文件哈希值及目标文件路径存储到数据库中,把编译后的文件存储到存储器中;
步骤5:若存储器空间已满,则采用最近最少使用替换策略LRU,选择最近最久未使用的目标文件,删除对应的数据库记录以及目标文件;
步骤6:若应用编译成功,则将编译后的文件放入存储器,并将编译结果返回给客户端;否则,将编译错误信息返回给客户端,一次编译过程完成。
2.如权利要求1所述的一种基于多用户缓存的物联网应用在线编译方法,其特征在于:步骤4.2的编译方式使用GCC开源编译工具。
3.如权利要求1所述的一种基于多用户缓存的物联网应用在线编译方法,其特征在于:步骤5删除目标文件时,为了减少文件替换次数,每次删除文件,基于LRU算法,选择20%的目标文件进行删除。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201911128284.1A CN111176654B (zh) | 2019-11-18 | 2019-11-18 | 一种基于多用户缓存的物联网应用在线编译方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201911128284.1A CN111176654B (zh) | 2019-11-18 | 2019-11-18 | 一种基于多用户缓存的物联网应用在线编译方法 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN111176654A CN111176654A (zh) | 2020-05-19 |
| CN111176654B true CN111176654B (zh) | 2021-04-27 |
Family
ID=70622328
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN201911128284.1A Active CN111176654B (zh) | 2019-11-18 | 2019-11-18 | 一种基于多用户缓存的物联网应用在线编译方法 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN111176654B (zh) |
Families Citing this family (8)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN112445489A (zh) * | 2020-10-29 | 2021-03-05 | 成都完美天智游科技有限公司 | 编译系统、电子设备及可读介质 |
| CN112596733B (zh) * | 2020-12-15 | 2024-01-05 | 北京五一视界数字孪生科技股份有限公司 | 编译和获取文件的方法、装置、存储介质、电子设备 |
| CN113805888A (zh) * | 2021-01-27 | 2021-12-17 | 北京沃东天骏信息技术有限公司 | 一种代码文件编译方法和装置 |
| CN113360135B (zh) * | 2021-04-21 | 2022-05-24 | 浙江大学 | 一种基于弹性伸缩的异构物联网应用远程编译方法 |
| CN113094051B (zh) * | 2021-04-27 | 2025-10-31 | 网易传媒科技(北京)有限公司 | 应用程序的构建方法、装置、设备和介质 |
| CN113051226A (zh) * | 2021-06-02 | 2021-06-29 | 芯华章科技股份有限公司 | 系统级编译方法、电子设备及存储介质 |
| CN114610323A (zh) * | 2022-03-24 | 2022-06-10 | 北京字节跳动网络技术有限公司 | 一种编译方法及装置 |
| CN118760436B (zh) * | 2024-09-06 | 2024-12-06 | 武汉凌久微电子有限公司 | 一种编译器性能优化方法 |
Citations (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN102520922A (zh) * | 2011-11-14 | 2012-06-27 | 上海交通大学 | 一种协作环境下的远程开发方法及其系统 |
| CN103136029A (zh) * | 2013-03-12 | 2013-06-05 | 无锡江南计算技术研究所 | 即时编译系统自适应调优方法 |
| CN103713889A (zh) * | 2012-09-29 | 2014-04-09 | 三亚中兴软件有限责任公司 | 一种应用的开发、编译和调试方法以及装置 |
| CN109271166A (zh) * | 2018-09-20 | 2019-01-25 | 摩尔元数(厦门)科技有限公司 | 一种在Web端实现在线编译的方法和平台 |
Family Cites Families (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US8286196B2 (en) * | 2007-05-03 | 2012-10-09 | Apple Inc. | Parallel runtime execution on multiple processors |
| CN102148654A (zh) * | 2010-02-10 | 2011-08-10 | 北京易路联动技术有限公司 | 一种基于网络侧编译的系统及方法 |
| CN104572194B (zh) * | 2014-12-30 | 2019-03-08 | 北京奇虎科技有限公司 | 一种模块加载方法和装置 |
| CN106648597A (zh) * | 2016-10-10 | 2017-05-10 | 许继集团有限公司 | 一种多用户并发式远程编译引擎架构 |
| CN107368292B (zh) * | 2017-03-29 | 2020-06-12 | 阿里巴巴集团控股有限公司 | 一种资源编译方法及装置 |
-
2019
- 2019-11-18 CN CN201911128284.1A patent/CN111176654B/zh active Active
Patent Citations (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN102520922A (zh) * | 2011-11-14 | 2012-06-27 | 上海交通大学 | 一种协作环境下的远程开发方法及其系统 |
| CN103713889A (zh) * | 2012-09-29 | 2014-04-09 | 三亚中兴软件有限责任公司 | 一种应用的开发、编译和调试方法以及装置 |
| CN103136029A (zh) * | 2013-03-12 | 2013-06-05 | 无锡江南计算技术研究所 | 即时编译系统自适应调优方法 |
| CN109271166A (zh) * | 2018-09-20 | 2019-01-25 | 摩尔元数(厦门)科技有限公司 | 一种在Web端实现在线编译的方法和平台 |
Also Published As
| Publication number | Publication date |
|---|---|
| CN111176654A (zh) | 2020-05-19 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN111176654B (zh) | 一种基于多用户缓存的物联网应用在线编译方法 | |
| CN103744709B (zh) | 补丁加载方法及装置 | |
| KR102010508B1 (ko) | 소스 코드 파일을 업데이트하는 시스템 및 방법 | |
| CN103984582A (zh) | 一种热更新方法和装置 | |
| US8887127B2 (en) | Web browsing apparatus and method through storing and optimizing JAVASCRIPT® code | |
| US20130268921A1 (en) | Optimization of an application to reduce local memory usage | |
| JP5966509B2 (ja) | プログラム、コード生成方法および情報処理装置 | |
| US20160004518A1 (en) | Profile guided optimization in the presence of stale profile data | |
| CN109918076B (zh) | 代码文件处理方法、系统、计算机设备及可读存储介质 | |
| CN111049889B (zh) | 一种静态资源上传方法、装置、集成服务器和系统 | |
| CN113360156A (zh) | 一种ios编译方法及相关设备 | |
| CN110019208A (zh) | 一种数据迁移方法、装置和介质 | |
| CN108549537A (zh) | 基于Android终端的用户数据采集的方法及系统 | |
| EP2771788B1 (en) | Methods and apparatuses for computing checksums for effective caching in continuous distributed builds | |
| CN116149726A (zh) | 增量代码分析方法、装置、设备及介质 | |
| CN108694049B (zh) | 一种更新软件的方法和设备 | |
| CN107844535B (zh) | 一种外部资源库调用方法及系统 | |
| CN111400243B (zh) | 基于流水线服务的研发管理系统以及文件存储方法、装置 | |
| US8949802B1 (en) | Sharding program compilation for large-scale static analysis | |
| CN114995820B (zh) | 代码翻译方法、装置、设备、存储介质和程序产品 | |
| CN117055969A (zh) | 应用程序打包方法、装置、设备及存储介质 | |
| WO2014019367A1 (zh) | 多级存储的重部署方法及装置 | |
| Jiang et al. | Lightweight Code Outlining for Android Applications | |
| CN112416372A (zh) | Aar修改构建方法、装置、电子设备和存储介质 | |
| US12327099B2 (en) | Methods and systems for using cached builds in software development |
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 |