CN116954678A - 对象更新方法、装置和计算机可读存储介质 - Google Patents

对象更新方法、装置和计算机可读存储介质 Download PDF

Info

Publication number
CN116954678A
CN116954678A CN202210378538.0A CN202210378538A CN116954678A CN 116954678 A CN116954678 A CN 116954678A CN 202210378538 A CN202210378538 A CN 202210378538A CN 116954678 A CN116954678 A CN 116954678A
Authority
CN
China
Prior art keywords
information
memory
updated
target
update
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.)
Pending
Application number
CN202210378538.0A
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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202210378538.0A priority Critical patent/CN116954678A/zh
Publication of CN116954678A publication Critical patent/CN116954678A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/656Updates while running

Abstract

本申请实施例公开了一种对象更新方法、装置和计算机可读存储介质;通过接收针对当前运行的目标应用程序的对象更新信息,该对象更新信息包括待更新内存对象对应的更新路径信息和待更新内存值;获取目标应用程序对应的对象信息集合,并基于更新路径信息,在对象信息集合中搜索与待更新内存对象匹配的目标对象信息;根据搜索到的目标对象信息,在目标应用程序对应的内存信息中确定与待更新内存对象匹配的目标内存对象;利用待更新内存值,对目标内存对象对应的内存值进行更新。以此,通过实时接收针对当前运行的目标应用程序的对象更新信息,从而在应用程序运行时实时进行内存对象的内存值的更新,简化了对象更新流程,进而提升了对象更新的效率。

Description

对象更新方法、装置和计算机可读存储介质
技术领域
本申请涉及互联网技术领域,具体涉及一种对象更新方法、装置和计算机可读存储介质。
背景技术
近年来,随着互联网技术的快速发展,应用程序的应用越来越广泛。为了满足技术更新与产品需求变更的需求,开发人员需要经常对程序进行变更,例如,需要对应用程序的内存对象等数据进行更新。在现有的对象更新方法中,大多通过修改配置文件来更新应用程序的内存对象等数据。
在对现有技术的研究和实践过程中发现,现有技术通过配置文件来修改内存对象以实现应用程序的对象更新的方法,在每次进行对象更新时都需要修改配置文件,然后部署应用程序的发布,并在发布之后重启服务以读取更新的数据,从而实现应用程序的变更,使得对象更新的流程冗长且耗时,进而导致对象更新的效率较低。
发明内容
本申请实施例提供一种对象更新方法、装置和计算机可读存储介质,可以简化了对象更新流程,进而提升了对象更新的效率。
本申请实施例提供一种对象更新方法,包括:
接收针对当前运行的目标应用程序的对象更新信息,所述对象更新信息包括待更新内存对象对应的更新路径信息和待更新内存值;
获取所述目标应用程序对应的对象信息集合,并基于所述更新路径信息,在所述对象信息集合中搜索与所述待更新内存对象匹配的目标对象信息;
根据搜索到的目标对象信息,在所述目标应用程序对应的内存信息中确定与所述待更新内存对象匹配的目标内存对象;
利用所述待更新内存值,对所述目标内存对象对应的内存值进行更新。
相应的,本申请实施例提供一种对象更新装置,包括:
接收单元,用于接收针对当前运行的目标应用程序的对象更新信息,所述对象更新信息包括待更新内存对象对应的更新路径信息和待更新内存值;
搜索单元,用于获取所述目标应用程序对应的对象信息集合,并基于所述更新路径信息,在所述对象信息集合中搜索与所述待更新内存对象匹配的目标对象信息;
确定单元,用于根据搜索到的目标对象信息,在所述目标应用程序对应的内存信息中确定与所述待更新内存对象匹配的目标内存对象;
更新单元,用于利用所述待更新内存值,对所述目标内存对象对应的内存值进行更新。
在一实施例中,所述确定单元,包括:
更新属性信息提取子单元,用于当搜索到所述目标对象信息时,在所述对象信息集合中提取出所述目标对象信息对应的更新属性信息;
更新权限确定子单元,用于基于所述更新属性信息,确定出所述待更新内存对象对应的更新权限;
目标内存对象确定子单元,用于当所述待更新内存对象的更新权限为可更新权限时,根据所述目标对象信息,在所述目标应用程序对应的内存信息中确定所述待更新内存对象匹配的目标内存对象。
在一实施例中,所述目标内存对象确定子单元,包括:
更新终端标识提取模块,用于在所述对象更新信息中提取出所述目标应用程序对应的更新终端标识;
本地更新权限确定模块,用于基于所述更新终端标识,确定所述目标应用程序在本地的本地更新权限;
确定模块,用于当所述本地更新权限为允许更新时,根据所述目标对象信息,在所述目标应用程序对应的内存信息中确定所述待更新内存对象匹配的目标内存对象。
在一实施例中,所述本地更新权限确定模块,用于:
获取所述目标应用程序在本地的当前终端标识;
在所述更新终端标识中搜索与所述当前终端标识匹配的目标终端标识;
当存在所述目标终端标识时,确定所述目标应用程序在本地的本地更新权限为允许更新。
在一实施例中,所述确定模块,包括:
第一筛选子模块,用于基于所述更新路径信息,在所述对象信息集合中筛选出所述待更新内存对象对应的类对象信息;
第二筛选子模块,用于获取所述类对象信息对应的实例集合,并基于所述目标对象信息,在所述实例集合中筛选出所述待更新内存对象对应的目标实例;
识别子模块,用于根据所述目标实例,在所述目标应用程序对应的内存信息中识别出与所述待更新内存对象匹配的目标内存对象。
在一实施例中,所述识别子模块,用于:
获取所述目标实例的反射信息;
在所述反射信息中提取出所述目标实例与待更新内存对象之间对应的对象地址偏移;
根据所述对象地址偏移,在所述目标应用程序对应的内存信息中筛选出所述待更新内存对象匹配的目标内存对象。
在一实施例中,所述接收单元,包括:
链接子单元,用于获取第三方资源集合,并将所述第三方资源集合与目标应用程序进行链接,得到链接后第三方资源集合;
接收子单元,用于通过所述链接后第三方资源集合,接收针对当前运行的目标应用程序的对象更新信息。
在一实施例中,所述接收子单元,包括:
订阅模块,用于通过所述链接后第三方资源集合订阅预设对象更新服务对应的主题;
接收模块,用于当所述主题中产生针对当前运行的目标应用程序的对象更新信息时,通过所述链接后第三方资源集合接收所述对象更新信息。
在一实施例中,所述搜索单元,包括:
路径提取子单元,用于在所述更新路径信息中提取出类路径信息和对象路径信息;
目标类对象信息筛选子单元,用于基于所述类路径信息,在所述对象信息集合中筛选出与所述待更新内存对象对应的目标类对象信息;
目标对象信息筛选子单元,用于根据所述对象路径信息,在所述目标类对象信息中搜索与所述待更新内存对象匹配的目标对象信息。
在一实施例中,所述对象更新装置,还包括:
获取单元,用于获取候选对象集合,在所述候选对象集合中选中至少一个更新内存对象;
配置单元,用于配置所述更新内存对象对应的更新内存值,并生成所述更新内存对象对应的当前更新路径信息;
上传单元,用于基于所述更新内存值和当前更新路径信息确定当前对象更新信息,并将所述当前对象更新信息上传至服务器,以便所述服务器将所述当前对象更新信息推送至当前运行所述目标应用程序的终端。
在一实施例中,所述上传单元,包括:
候选终端标识集合获取子单元,用于获取预设对象更新服务对应的候选终端标识集合,所述候选终端标识集合包括至少一个候选终端标识;
更新终端标识确定子单元,用于在所述候选终端标识集合的候选终端标识中确定至少一个更新终端标识;
构建子单元,用于基于所述更新内存值、当前更新路径信息以及更新终端标识,构建针对所述更新内存对象的当前对象更新信息。
此外,本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行本申请实施例所提供的任一种对象更新方法中的步骤。
此外,本申请实施例还提供一种计算机设备,包括处理器和存储器,所述存储器存储有应用程序,所述处理器用于运行所述存储器内的应用程序实现本申请实施例提供的对象更新方法。
本申请实施例还提供一种计算机程序产品或计算机程序,所述计算机程序产品或计算机程序包括计算机指令,所述计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取所述计算机指令,处理器执行所述计算机指令,使得所述计算机设备执行本申请实施例提供的对象更新方法中的步骤。
本申请实施例通过接收针对当前运行的目标应用程序的对象更新信息,该对象更新信息包括待更新内存对象对应的更新路径信息和待更新内存值;获取目标应用程序对应的对象信息集合,并基于更新路径信息,在对象信息集合中搜索与待更新内存对象匹配的目标对象信息;根据搜索到的目标对象信息,在目标应用程序对应的内存信息中确定与待更新内存对象匹配的目标内存对象;利用待更新内存值,对目标内存对象对应的内存值进行更新。以此,通过实时接收针对当前运行的目标应用程序的对象更新信息,并根据对象更新信息中的更新路径信息搜索目标应用程序中是否存在待更新内存对象对应的目标对象信息,从而根据搜索到的目标对象信息,在目标应用程序对应的内存信息中确定与待更新内存对象匹配的目标内存对象,并进行内存值的更新,无需在更新内存对象时进行应用部署、发布以及服务重启,简化了对象更新流程,进而提升了对象更新的效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种对象更新方法实施场景示意图;
图2是本申请实施例提供的一种对象更新方法的流程示意图;
图3是本申请实施例提供的一种对象更新方法的架构示意图;
图4是本申请实施例提供的一种对象更新方法的具体流程示意图;
图5是本申请实施例提供的一种对象更新方法的另一架构示意图;
图6是本申请实施例提供的一种对象更新方法的另一流程示意图;
图7是本申请实施例提供的对象更新装置的结构示意图;
图8是本申请实施例提供的计算机设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例提供一种对象更新方法、装置和计算机可读存储介质。其中,该对象更新装置可以集成在计算机设备中,该计算机设备可以是服务器,也可以是终端等设备。
请参阅图1,以对象更新装置集成在计算机设备中为例,图1为本申请实施例所提供的对象更新方法的实施场景示意图,包括服务器A以及终端B,其中,服务器A可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、网络加速服务(Content Delivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。服务器A可以接收针对当前运行的目标应用程序的对象更新信息,该对象更新信息包括待更新内存对象对应的更新路径信息和待更新内存值;获取目标应用程序对应的对象信息集合,并基于更新路径信息,在对象信息集合中搜索与待更新内存对象匹配的目标对象信息;根据搜索到的目标对象信息,在目标应用程序对应的内存信息中确定与待更新内存对象匹配的目标内存对象;利用待更新内存值,对目标内存对象对应的内存值进行更新。
终端B可以包括但不限于智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表、智能语音交互设备、智能家电、车载终端、飞行器等设备。
终端B以及服务器A可以通过有线或无线通信方式进行直接或间接地连接,服务器A可以获取终端B上传的数据以执行相应的操作,本申请在此不做限制。
需要说明的是,图1所示的对象更新方法的实施环境场景示意图仅仅是一个示例,本申请实施例描述的对象更新方法的实施环境场景是为了更加清楚的说明本申请实施例的技术方案,并不构成对于本申请实施例提供的技术方案的限定。本领域普通技术人员可知,随着对象更新的演变和新业务场景的出现,本申请提供的技术方案对于类似的技术问题,同样适用。
以下分别进行详细说明。需要说明的是,以下实施例的描述顺序不作为对实施例优选顺序的限定。
本实施例将从对象更新装置的角度进行描述,该对象更新装置具体可以集成在计算机设备中,该计算机设备可以是终端,本申请在此不作限制。
请参阅图2,图2是本申请实施例提供的对象更新方法的流程示意图。该对象更新方法包括:
在步骤101中,接收针对当前运行的目标应用程序的对象更新信息。
其中,该目标应用程序可以为当前正在运行的至少一个应用程序(Application,简称APP),该对象更新信息可以包括待更新内存对象对应的更新路径信息和待更新内存值,该待更新内存对象可以为需要进行更新的内存对象,该内存对象可以为计算机的内存资源中的对象,该对象(Object)可以为由标识符标记的,包含值的内存块,如变量、数据结构、类等类型的内存块,例如,该待更新内存对象可以为一个字段。该更新路径信息可以为待更新内存对象对应的路径信息,可以用于查找待更新内存对象在内存资源中对应的对象,比如,可以为包括由待更新内存对象对应的包(package)到消息、再由消息(message)到字段(field)的路径信息,例如,该待更新路径信息可以包括待更新内存对象对应的包名称、消息名称以及字段名称等信息。该待更新内存值可以为待更新内存对象对应的待更新的属性值。
其中,接收针对当前运行的目标应用程序的对象更新信息的方式可以有多种,例如,可以获取第三方资源集合,并将该第三方资源集合与目标应用程序进行链接,得到链接后第三方资源集合,通过该链接后第三方资源集合,接收针对当前运行的目标应用程序的对象更新信息。
其中,该第三方资源集合可以为Libary(简称Lib)库,提供对应的接口和行为,一般通过包管理工具引入,例如,可以通过Java(一种面向对象的编程语言)的项目对象模型(maven)包,C++(一种计算机高级程序设计语言)的静态数据链接库文件(即lib文件)等包管理工具,库是一种可执行代码的二进制形式,可以被操作系统载入内存执行,可选的,该第三方资源集合可以为静态链接库。该链接后第三方资源集合可以为与目标应用程序进行链接后的第三方资源集合,该链接后第三方资源集合与目标应用程序处于同一进程中。
其中,将该第三方资源集合与目标应用程序进行链接的方式可以有多种,例如,可以在目标应用程序对应的编译阶段中,将目标应用程序对应的源文件中用到的库函数(即第三方资源集合)与汇编生成的目标文件.o(对象文件)进行合并,并生成到可执行文件中,以此实现第三方资源集合与目标应用程序的链接,得到链接后第三方资源集合。
在将该第三方资源集合与目标应用程序进行链接之后,便可以通过该链接后第三方资源集合,接收针对当前运行的目标应用程序的对象更新信息。其中,通过该链接后第三方资源集合,接收针对当前运行的目标应用程序的对象更新信息的方式可以有多种,例如,可以通过该链接后第三方资源集合订阅预设对象更新服务对应的主题,当该主题中产生针对当前运行的目标应用程序的对象更新信息时,通过该链接后第三方资源集合接收该对象更新信息。
其中,预设对象更新服务可以为预先设定的一个用于更新内存对象的内存值的服务,该主题(Topic)可以为消息的分组,例如,可以为消息队列中的消息传递模型,该消息队列(Message Queue,简称MQ)可以为消息的传输过程中保存消息的容器,是一种进程间通信或同一进程间的异步通信方式,消息订阅者可以只关注其订阅的Topic,消息生产者也只会向自己的Topic写入消息,其中,消息生产者(producer)可以为业务的发起方,负责生产消息,投递到消息队列中,而消息订阅者(consumer),也即消费者,可以为业务的处理方,负责从消息队列中获取消息并进行业务逻辑处理。
具体的,可以将链接后第三代资源集合作为消费者,通过链接后第三代资源集合订阅预设对象更新服务对应的主题,当该主题中产生针对当前运行的目标应用程序的对象更新信息时,可以通过该链接后第三方资源集合接收该对象更新信息。其中,由于链接后第三方资源集合与目标应用程序处于同一进程中,因此,相对于现有技术中通过其他服务来获取对象更新信息,本申请实施例通过将第三方资源集合作为消费者并链接到目标应用程序中,并通过链接后第三方资源集合来接收对象更新信息,可以避免现有技术中在其他服务不可用时导致的无法正常接收对象更新信息的风险,同时,同一进程之间的信息通信,可以减少网络资源的消耗和传输时延,进而提高了对象更新效率。
在一实施例中,请参考图3,图3是本申请实施例提供的一种对象更新方法的架构示意图,其中,应用程序1以及应用程序2可以为正在运行的目标应用程序,都订阅了预设对象更新服务对应的主题。运营人员或者开发人员可以在运营控制台的控制界面中确定待更新内存对象以及对应的待更新内存值,从而通过运营控制台产生对象更新信息对应的消息,并投递到消息队列对应的主题中,从而,可以通过消息队列将对象更新信息对应的消息推送至对应的消费者中,从而可以通过目标应用程序中的链接后第三方资源集合来接收对象更新信息,以进行后续的对象更新操作。
可选的,可以在接收针对当前运行的目标应用程序的对象更新信息之前,获取候选对象集合,在该候选对象集合中选中至少一个待更新内存对象,配置该待更新内存对象对应的待更新内存值,并生成该待更新内存对象对应的更新路径信息,基于该待更新内存值和更新路径信息确定对象更新信息,并将该对象更新信息上传至服务器,以便该服务器将该对象更新信息推送至当前运行该目标应用程序的终端。
其中,该候选对象集合可以为至少一个候选对象构成的整体,该候选对象可以为目标应用程序对应的内存对象。该服务器可以为预设对象更新服务的服务器,通过该服务器,可以将对象更新信息发送到对应的当前运行该目标应用程序的终端中,以实现待更新内存对象在对应的目标应用程序中的更新。
在步骤102中,获取目标应用程序对应的对象信息集合,并基于更新路径信息,在对象信息集合中搜索与待更新内存对象匹配的目标对象信息。
其中,该对象信息集合可以为目标应用程序对应的描述对象的信息构成的整体,即目标应用程序的元信息,元信息即系统自描述信息,用于描述系统本身。例如,应用程序对应的系统中包括哪些类(Class)、类中有哪些字段、哪些方法、字段属于的类型、字段之间的组合关系以及方法的参数和返回值等信息,可以在目标应用程序的编译过程中构建对象信息集合,以基于对象信息集合,可以实现程序在运行时可以访问、检测和修改它本身状态或行为的能力,也即反射机制。该目标对象信息可以为对象信息集合中与待更新内存对象匹配的对象信息,例如,可以为待更新内存对象的字段名称、属性等描述信息。
其中,获取目标应用程序对应的对象信息集合的方式可以有多种,例如,对于Java语言的程序,在编译阶段可以将程序的元信息编译进了类文件(即class文件),在程序运行时,Java虚拟机(Java Virtual Machine,简称JVM)将会把class文件加载到JVM内存模型中的方法区中,以此可以使程序运行时具有获取关于自身的元信息的能力,从而可以提供反射机制,以此,对于采用Java语言的目标应用程序,可以在程序运行时,通过JVM内存模型中的方法区中获取目标应用程序对应的对象信息集合。又例如,对于C++语言的程序,可以通过一种数据描述语言(Protocol Buffers,简称Protobuf)提供反射机制,Protobuf是一种开源跨平台的序列化数据结构的协议,通常用于开发需要在网络中传输与保存数据的程序。在编译阶段,可以使用Protobuf内置的编译器(protoc)将Protobuf的接口定义语言文件,也即proto文件进行编译,得到的C++文件(.cc文件),该C++文件中包括了读写数据的接口以及proto文件内容,从而可以通过调用该C++文件,将proto文件内容中的元信息(Descriptor)加载到元信息池(DescriptorPool)中,从而可以通过元信息池获取到目标应用程序对应的对象信息集合等。
在获取目标应用程序对应的对象信息集合之后,便可以基于该更新路径信息,在该对象信息集合中搜索与该待更新内存对象匹配的目标对象信息。其中,基于该更新路径信息,在该对象信息集合中搜索与该待更新内存对象匹配的目标对象信息的方式可以有多种,例如,可以在该更新路径信息中提取出类路径信息和对象路径信息,基于该类路径信息,在该对象信息集合中筛选出与该待更新内存对象对应的目标类对象信息,根据该对象路径信息,在该目标类对象信息中搜索与该待更新内存对象匹配的目标对象信息。
其中,该类路径信息可以为用于查找待更新内存对象对应的类对象信息的路径信息,该类对象信息可以为对象信息集合中的一个类对应的对象信息。由于proto文件在编译之后,每一message对象都会生成一个名称与之对应的C++类,因此,该类路径信息可以包括待更新内存对象对应的包名称以及类名称(即message对象的名称)等信息。该目标类对象信息可以为对象信息集合中与该类路径信息匹配的类对象信息。该对象路径信息可以为用于查找待更新内存对象对应的目标对象信息的路径信息,例如,可以包括由待更新内存对象对应的类到字段的路径信息,可以包括待更新内存对象对应的message对象名称以及待更新内存对象的字段名称等信息。
例如,假设目标应用程序对应的proto文件中存在package名称为example的message对象,其中,message对象的定义可以如下所示:
可以将字段flag确定为待更新内存对象,其更新路径信息可以为example.Foo.flag,从而可以在该更新路径信息中提取出类路径信息和对象路径信息,其中,类路径信息可以为example.Foo,对象路径信息可以为Foo.flag,从而可以基于类路径信息example.Foo,在该对象信息集合中筛选出包名称为example、类名称为Foo的目标类对象信息,然后,可以根据该对象路径信息Foo.flag,在该目标类对象信息Foo中搜索与该待更新内存对象flag匹配的目标对象信息。
在一实施例中,假设待更新内存对象为类Foo中的flag字段,请参考图4,图4是本申请实施例提供的一种对象更新方法的具体流程示意图,可以修改flag属性的值为True,即待更新内存值为True,从而可以通过消息队列(MQ)将待更新内存对象flag对应的对象更新信息发送到目标应用程序对应的终端中,然后,可以更新路径信息example.Foo.flag在目标应用程序对应的对象信息集合中找到protobuf生成的Foo对象的flag属性。
在步骤103中,根据搜索到的目标对象信息,在目标应用程序对应的内存信息中确定与待更新内存对象匹配的目标内存对象。
其中,该内存信息可以为表征计算机的内存储器的存储空间的信息,例如,可以为计算机的内存资源,该目标内存对象可以为目标应用程序对应的内存信息中与待更新对象匹配的内存对象。
其中,根据搜索到的目标对象信息,在该目标应用程序对应的内存信息中确定与该待更新内存对象匹配的目标内存对象的方式可以有多种,例如,可以当搜索到该目标对象信息时,在该对象信息集合中提取出该目标对象信息对应的更新属性信息,基于该更新属性信息,确定出该待更新内存对象对应的更新权限,当该待更新内存对象的更新权限为可更新权限时,根据该目标对象信息,在该目标应用程序对应的内存信息中确定该待更新内存对象匹配的目标内存对象。
其中,该更新属性信息可以为表征该待更新内存对象的更新属性的信息,该更新属性可以为表征是否可以对待更新内存对象进行更新的属性,该更新权限可以为对该待更新内存对象进行更新的权限,例如,可以包括可更新权限和不可更新权限,该可更新权限可以为允许对待更新内存对象进行更新的权限,该不可更新权限可以为不允许对待更新内存对象进行更新的权限。
可选的,可以在定义待更新内存对象时,对待更新内存对象对应的更新属性信息进行配置,比如,可以在定义待更新内存对象时,对其更新属性进行标记,例如,可以在proto文件中定义待更新内存对象的字段时,使用Protobuf内置的字段级别选项(FieldOptions),给待更新内存对象对应的属性值加上注解,以标记该待更新内存对象是否可以进行更新,以此,通过标记出哪些字段可以在运行时被修改值,可以控制对内存对象进行修改的范围,进而可以避免因无关字段被误修改而导致目标应用程序无法正常提供服务的情况发生。
其中,在该对象信息集合中提取出该目标对象信息对应的更新属性信息的方式可以有多种,比如,可以在该对象信息集合中提取出该目标对象信息对应的更新属性的相关描述信息,例如,假设待更新内存对象为类Foo中的字段flag,可以预先定义一个用于设置待更新内存对象的更新属性的类“字段规则”,可以如下:
从而,可以在对象信息集合中,提取出该目标对象信息flag对应的更新属性的相关描述信息,即可以提取出更新属性信息为“(field_rule).is_dynamic_attr=true”,基于该更新属性信息,可以确定出该待更新内存对象对应的更新权限为可更新权限。例如,请继续参考图4,在该对象信息集合中提取出该目标对象信息对应的更新属性信息“(field_rule).is_dynamic_attr=true”,基于该更新属性信息,可以确定出该待更新内存对象flag对应的更新权限为可更新权限。
在该对象信息集合中提取出该目标对象信息对应的更新属性信息,基于该更新属性信息,确定出该待更新内存对象对应的更新权限之后,便可以在该待更新内存对象的更新权限为可更新权限时,根据该目标对象信息,在该目标应用程序对应的内存信息中确定该待更新内存对象匹配的目标内存对象。其中,根据该目标对象信息,在该目标应用程序对应的内存信息中确定该待更新内存对象匹配的目标内存对象的方式可以有多种,例如,可以在该对象更新信息中提取出该目标应用程序对应的更新终端标识,基于该更新终端标识,确定该目标应用程序在本地的本地更新权限,当该本地更新权限为允许更新时,根据该目标对象信息,在该目标应用程序对应的内存信息中确定该待更新内存对象匹配的目标内存对象。
其中,该更新终端标识可以为待进行内存对象更新的终端对应的标识,该标识可以为唯一确定一个终端,例如,该标识可以为终端对应的机器网际互连协议(InternetProtocol,简称IP)地址,也可以为终端对应的机器号(Identity document,简称Id)等。该本地更新权限可以为目标应用程序在本地对应的更新权限,例如,可以为目标应用程序对应的终端进行待更新内容对象的更新的权限,该本地更新权限可以包括允许更新以及不允许更新的权限。
其中,在该对象更新信息中提取出该目标应用程序对应的更新终端标识之前,可以获取预设对象更新服务对应的候选终端标识集合,在该候选终端标识集合的候选终端标识中确定至少一个更新终端标识,基于该待更新内存值、更新路径信息以及更新终端标识,构建针对该待更新内存对象的对象更新信息。例如,请参考图5,图5是本申请实施例提供的一种对象更新方法的另一架构示意图,可以通过服务发现机制(例如zookeeper)拉取预设对象更新服务对应的终端标识集合,从而通过运营控制台,确定待更新内存对象和待更新内存值,以及在终端标识集合中选中更新终端标识,然后,可以通过消息队列投递对象更新信息对应的消息到消费者中,从而,可以通过目标应用程序对应的链接后第三方资源集合接收对象更新信息。
其中,该候选终端标识集合可以为预设对象更新服务对应的终端标识集合,该终端标识集合可以包括至少一个候选终端标识,该候选终端标识可以为预设对象更新服务对应的终端的标识。
在该对象更新信息中提取出该目标应用程序对应的更新终端标识之后,便可以基于该更新终端标识,确定该目标应用程序在本地的本地更新权限。其中,基于该更新终端标识,确定该目标应用程序在本地的本地更新权限的方式可以有多种,例如,可以获取该目标应用程序在本地的当前终端标识,在该更新终端标识中搜索与该当前终端标识匹配的目标终端标识,当存在该目标终端标识时,确定该目标应用程序在本地的本地更新权限为允许更新。
其中,该当前终端标识可以为目标应用程序当前所在终端的终端标识,该目标终端标识可以为更新终端标识中与该当前终端标识匹配的终端标识,例如,可以为与当前终端标识相同的终端标识。可选的,请继续参考图5,当更新终端标识中存在与该当前终端标识匹配的目标终端标识时,可以表明目标应用程序对应的终端为可进行待更新内存对象的更新的终端,也即该目标应用程序在本地的本地更新权限为允许更新;当更新终端标识中不存在与该当前终端标识匹配的目标终端标识时,可以表明目标应用程序对应的终端不具有进行待更新内存对象的更新的终端的权限,也即该目标应用程序在本地的本地更新权限为不允许更新,此时可以忽略对象更新操作。
在基于该更新终端标识,确定该目标应用程序在本地的本地更新权限之后,便可以在本地更新权限为允许更新时,根据该目标对象信息,在该目标应用程序对应的内存信息中确定该待更新内存对象匹配的目标内存对象。其中,根据该目标对象信息,在该目标应用程序对应的内存信息中确定该待更新内存对象匹配的目标内存对象的方式可以有多种,例如,可以基于该更新路径信息,在该对象信息集合中筛选出该待更新内存对象对应的类对象信息,获取该类对象信息对应的实例集合,并基于该目标对象信息,在该实例集合中筛选出该待更新内存对象对应的目标实例,根据该目标实例,在该目标应用程序对应的内存信息中识别出与该待更新内存对象匹配的目标内存对象。
其中,该类对象信息可以为待更新内存对象对应的类的对象信息,例如,可以为待更新内存对象对应的message对象的类对应的元信息,由于message为类,无法直接调用其属性和方法,因此,需要通过相应的实例(instance)来调用message对象的属性和方法。该实例集合可以为一个message对象的类对应的至少一个实例构成的整体,例如,该实例集合可以为实例工厂(MessageFactory),MessageFactory是一个纯虚的基类,定义了通过元信息Descriptor来获取对应类型的实例的接口,对外提供根据Descriptor获取相应实例的能力。该目标实例可以为实例集合中与待更新内存对象匹配的实例。
其中,基于该更新路径信息,在该对象信息集合中筛选出该待更新内存对象对应的类对象信息的方式可以有多种,比如,可以在更新路径信息中,提取出待更新内存对象对应的message对象的名称,也即类名称,从而可以根据类名称在该对象信息集合中筛选出该待更新内存对象对应的类对象信息,例如,可以根据待更新内存对象对应的message对象的名称,调用FindMessageTypeByName接口,在对象信息集合中查找出该待更新内存对象对应的类对象信息等。
在基于该更新路径信息,在该对象信息集合中筛选出该待更新内存对象对应的类对象信息之后,便可以基于该目标对象信息,在该实例集合中筛选出该待更新内存对象对应的目标实例。其中,基于该目标对象信息,在该实例集合中筛选出该待更新内存对象对应的目标实例的方式可以有多种,比如,可以根据该目标对象信息中待更新内存对象的字段名称,在该实例集合中筛选出该待更新内存对象对应的目标实例,例如,可以根据待更新内存对象的字段名称,调用FindFieldByName接口,在实例集合中查找出该待更新内存对象对应的目标实例等。
在基于该目标对象信息,在该实例集合中筛选出该待更新内存对象对应的目标实例之后,便可以根据该目标实例,在该目标应用程序对应的内存信息中识别出与该待更新内存对象匹配的目标内存对象。其中,根据该目标实例,在该目标应用程序对应的内存信息中识别出与该待更新内存对象匹配的目标内存对象的方式可以有多种,例如,可以获取该目标实例的反射信息,在该反射信息中提取出该目标实例与待更新内存对象之间对应的对象地址偏移,根据该对象地址偏移,在该目标应用程序对应的内存信息中筛选出该待更新内存对象匹配的目标内存对象。
其中,该反射信息可以为目标实例对应的反射接口(reflection)中存储的信息,该对象偏移地址可以为目标实例与目标应用程序对应的内存信息中与待更新对象匹配的内存对象之间的内存偏移地址,从而可以根据该对象地址偏移,在该目标应用程序对应的内存信息中查找到该待更新内存对象匹配的目标内存对象,以进行对象更新操作。
可选的,该对象偏移地址可以目标实例与对应的对象属性的内存偏移地址,由于任何一个对象都对应一段内存,有内存起始(start_addr)和结束地址,而对象的每一个属性,都位于start_addr+内存偏移(offset)的内存地址中,因此,当对象和对应属性的内存偏移offset为已知时,就可以获取对象属性的内存地址,从而可以根据属性的内存地址,对待更新内存对象的内存值进行更新。
在步骤104中,利用待更新内存值,对目标内存对象对应的内存值进行更新。
其中,可以将目标内存对象的内存值修改为待更新内存值,以此实现对待更新内存对象的更新。相对于现有技术中通过修改配置文件来更新应用程序的内存对象的方法,本申请实施例提供的对象更新方法通过实时获取对象更新消息的变更,从而在目标应用程序运行时对目标应用程序中的内存对象进行实时更新,以此,可以避免了应用部署和发布的流程,简化了对象更新的流程,同时,可以避免每次进行对象更新时对服务进行重启,减少了对象更新的耗时,进而大大提升了对象更新的效率。
可选的,待更新内存对象的类型可以有多种,比如,可以为基本数据类型,例如,可以包括整数类型的内存对象(int、long、uint)、浮点数类型的内存对象(float、double)、字符类型的内存对象(char)、布尔类型的内存对象(boolean)以及字符串类型的内存对象(string)。其中,可选的,对于列表集合(List)以及映射集合(Map)等数据结构,可以将其字段类型定义成字符串类型,然后在修改内存值时,可以传入轻量级数据交换格式(JavaScript Object Notation,简称JSON),然后将其序列化成List或Map类型。
在一实施例中,可以通过运营控制台的控制界面,获取候选对象集合,在该候选对象集合中选中至少一个更新内存对象,配置该更新内存对象对应的更新内存值,并生成该更新内存对象对应的当前更新路径信息,基于该更新内存值和当前更新路径信息确定当前对象更新信息,并将该当前对象更新信息上传至服务器,以便该服务器将该当前对象更新信息推送至当前运行该目标应用程序的终端。
其中,该候选对象集合可以为至少一个候选对象构成的整体,该候选对象可以为目标应用程序对应的内存对象,该更新内存对象可以为在该候选对象集合中选中至少一个内存对象,该更新内存值可以为更新内存对象对应的待更新的属性值,该当前更新路径信息可以为该更新内存对象对应的路径信息,可以用于查找更新内存对象在内存资源中对应的对象,比如,可以为包括由更新内存对象对应的包到消息、再由消息到字段的路径信息,例如,该更新路径信息可以包括更新内存对象对应的包名称、消息名称以及字段名称等信息。该当前对象更新信息可以为指示进行更新内存对象的内存值的更新的信息。该服务器可以为提供更新内存对象的相关更新服务的服务器,通过该服务器,可以将对象更新信息发送到对应的当前运行该目标应用程序的终端中,以实现更新内存对象在对应的目标应用程序中的更新。该当前对象更新信息可以为对象更新信息,也可以与对象更新信息为在不同时间生成的对象更新信息。
其中,基于该更新内存值和当前更新路径信息确定当前对象更新信息的方式可以有多种,例如,可以获取预设对象更新服务对应的候选终端标识集合,在该候选终端标识集合的候选终端标识中确定至少一个更新终端标识,基于该更新内存值、当前更新路径信息以及更新终端标识,构建针对该更新内存对象的当前对象更新信息。
以此,可以将本申请实施例提供的对象更新方法,作为灰度发布流程中的灰度开关,避免更新内存对象时需要进行应用部署、发布和重启的流程,提升了对象更新的效率,此外,可以使用本申请实施例提供的对象更新方法作为事件触发手段,通过推送一个新的对象内存值来触发事件,取代传统的服务等待请求的模式或者虚拟光驱(Daemon)定时驱动触发的模式,减少开发成本,同时,可以通过开发人员手工推送新的内存值来触发服务端处理请求,避免了现有服务响应方式中服务端依赖客户端的请求,只有在客户端请求的时候才会作出响应的情况,提高了请求触发与响应的灵活性。
由以上可知,本申请实施例通过接收针对当前运行的目标应用程序的对象更新信息,该对象更新信息包括待更新内存对象对应的更新路径信息和待更新内存值;获取目标应用程序对应的对象信息集合,并基于更新路径信息,在对象信息集合中搜索与待更新内存对象匹配的目标对象信息;根据搜索到的目标对象信息,在目标应用程序对应的内存信息中确定与待更新内存对象匹配的目标内存对象;利用待更新内存值,对目标内存对象对应的内存值进行更新。以此,通过实时接收针对当前运行的目标应用程序的对象更新信息,并根据对象更新信息中的更新路径信息搜索目标应用程序中是否存在待更新内存对象对应的目标对象信息,从而根据搜索到的目标对象信息,在目标应用程序对应的内存信息中确定与待更新内存对象匹配的目标内存对象,并进行内存值的更新,避免了更新内存对象时需要进行应用部署、发布和重启的流程,从而简化了对象更新流程,进而提升了对象更新的效率。
根据上面实施例所描述的方法,以下将举例作进一步详细说明。
在本实施例中,将以该对象更新装置具体集成在计算机设备为例进行说明。其中,该对象更新方法以终端为执行主体进行具体的描述。
为了更好的描述本申请实施例,请参阅图6,图6为本申请实施例提供的对象更新方法的另一流程示意图。具体流程如下:
在步骤201中,终端获取第三方资源集合,并将该第三方资源集合与目标应用程序进行链接,得到链接后第三方资源集合,通过该链接后第三方资源集合订阅预设对象更新服务对应的主题,当该主题中产生针对当前运行的目标应用程序的对象更新信息时,通过该链接后第三方资源集合接收该对象更新信息。
其中,终端将该第三方资源集合与目标应用程序进行链接的方式可以有多种,例如,终端可以在目标应用程序对应的编译阶段中,将目标应用程序对应的源文件中用到的库函数(即第三方资源集合)与汇编生成的目标文件.o(对象文件)进行合并,并生成到可执行文件中,以此实现第三方资源集合与目标应用程序的链接,得到链接后第三方资源集合。
具体的,终端可以将链接后第三代资源集合作为消费者,通过链接后第三代资源集合订阅预设对象更新服务对应的主题,当该主题中产生针对当前运行的目标应用程序的对象更新信息时,可以通过该链接后第三方资源集合接收该对象更新信息。其中,由于链接后第三方资源集合与目标应用程序处于同一进程中,因此,相对于现有技术中通过其他服务来获取对象更新信息,本申请实施例通过将第三方资源集合作为消费者并链接到目标应用程序中,并通过链接后第三方资源集合来接收对象更新信息,可以避免现有技术中在其他服务不可用时导致的无法正常接收对象更新信息的风险,同时,同一进程之间的信息通信,可以减少网络资源的消耗和传输时延,进而提高了对象更新效率。
在一实施例中,请参考图3,图3是本申请实施例提供的一种对象更新方法的架构示意图,其中,应用程序1以及应用程序2可以为正在运行的目标应用程序,都订阅了预设对象更新服务对应的主题。运营人员或者开发人员可以在运营控制台的控制界面中确定待更新内存对象以及对应的待更新内存值,从而通过运营控制台产生对象更新信息对应的消息,并投递到消息队列对应的主题中,从而,可以通过消息队列将对象更新信息对应的消息推送至对应的消费者中,从而可以通过目标应用程序中的链接后第三方资源集合来接收对象更新信息,以进行后续的对象更新操作。
可选的,终端可以在接收针对当前运行的目标应用程序的对象更新信息之前,获取候选对象集合,在该候选对象集合中选中至少一个待更新内存对象,配置该待更新内存对象对应的待更新内存值,并生成该待更新内存对象对应的更新路径信息,基于该待更新内存值和更新路径信息确定对象更新信息,并将该对象更新信息上传至服务器,以便该服务器将该对象更新信息推送至当前运行该目标应用程序的终端。
在步骤202中,终端获取该目标应用程序对应的对象信息集合,并基于该更新路径信息,在该对象信息集合中搜索与该待更新内存对象匹配的目标对象信息。
其中,终端获取目标应用程序对应的对象信息集合的方式可以有多种,例如,对于Java语言的程序,在编译阶段可以将程序的元信息编译进了类文件(即class文件),在程序运行时,可以提高JVM将class文件加载到JVM内存模型中的方法区中,以此可以使程序运行时具有获取关于自身的元信息的能力,从而可以提供反射机制,以此,对于采用Java语言的目标应用程序,终端可以在程序运行时,通过JVM内存模型中的方法区中获取目标应用程序对应的对象信息集合。又例如,对于C++语言的程序,可以通过Protobuf提供反射机制,Protobuf是一种开源跨平台的序列化数据结构的协议,通常用于开发需要在网络中传输与保存数据的程序。在编译阶段,终端可以使用Protobuf内置的编译器(protoc)将Protobuf的接口定义语言文件,也即proto文件进行编译,得到的C++文件(.cc文件),该C++文件中包括了读写数据的接口以及proto文件内容,从而可以通过调用该C++文件,将proto文件内容中的元信息Descriptor加载到元信息池DescriptorPool中,从而可以通过元信息池获取到目标应用程序对应的对象信息集合等。
在获取目标应用程序对应的对象信息集合之后,便可以基于该更新路径信息,在该对象信息集合中搜索与该待更新内存对象匹配的目标对象信息。其中,终端基于该更新路径信息,在该对象信息集合中搜索与该待更新内存对象匹配的目标对象信息的方式可以有多种,例如,终端可以在该更新路径信息中提取出类路径信息和对象路径信息,基于该类路径信息,在该对象信息集合中筛选出与该待更新内存对象对应的目标类对象信息,根据该对象路径信息,在该目标类对象信息中搜索与该待更新内存对象匹配的目标对象信息。
例如,假设目标应用程序对应的proto文件中存在package名称为example的message对象,其中,message对象的定义可以如下所示:
可以将字段flag确定为待更新内存对象,其更新路径信息可以为example.Foo.flag,从而终端可以在该更新路径信息中提取出类路径信息和对象路径信息,其中,类路径信息可以为example.Foo,对象路径信息可以为Foo.flag,从而可以基于类路径信息example.Foo,在该对象信息集合中筛选出包名称为example、类名称为Foo的目标类对象信息,然后,终端可以根据该对象路径信息Foo.flag,在该目标类对象信息Foo中搜索与该待更新内存对象flag匹配的目标对象信息。
在一实施例中,假设待更新内存对象为类Foo中的flag字段,请参考图4,可以修改flag属性的值为True,即待更新内存值为True,从而可以通过消息队列(MQ)将待更新内存对象flag对应的对象更新信息发送到目标应用程序对应的终端中,然后,终端可以更新路径信息example.Foo.flag在目标应用程序对应的对象信息集合中找到Protobuf生成的Foo对象的flag属性。
在步骤203中,当搜索到该目标对象信息时,终端在该对象信息集合中提取出该目标对象信息对应的更新属性信息,基于该更新属性信息,确定出该待更新内存对象对应的更新权限。
可选的,可以在定义待更新内存对象时,对待更新内存对象对应的更新属性信息进行配置,比如,可以在定义待更新内存对象时,对其更新属性进行标记,例如,可以在proto文件中定义待更新内存对象的字段时,使用Protobuf内置的字段级别选项(FieldOptions),给待更新内存对象对应的属性值加上注解,以标记该待更新内存对象是否可以进行更新,以此,通过标记出哪些字段可以在运行时被修改值,可以控制对内存对象进行修改的范围,进而可以避免因无关字段被误修改而导致目标应用程序无法正常提供服务的情况发生。
其中,终端在该对象信息集合中提取出该目标对象信息对应的更新属性信息的方式可以有多种,比如,终端可以在该对象信息集合中提取出该目标对象信息对应的更新属性的相关描述信息,例如,假设待更新内存对象为类Foo中的字段flag,可以预先定义一个用于设置待更新内存对象的更新属性的类“字段规则”,可以如下:
从而,终端可以在对象信息集合中,提取出该目标对象信息flag对应的更新属性的相关描述信息,即可以为更新属性信息“(field_rule).is_dynamic_attr=true”,基于该更新属性信息,可以确定出该待更新内存对象对应的更新权限为可更新权限。例如,请继续参考图4,在该对象信息集合中提取出该目标对象信息对应的更新属性信息“(field_rule).is_dynamic_attr=true”,终端基于该更新属性信息,可以确定出该待更新内存对象flag对应的更新权限为可更新权限。
在步骤204中,当该待更新内存对象的更新权限为可更新权限时,终端在该对象更新信息中提取出该目标应用程序对应的更新终端标识,获取该目标应用程序在本地的当前终端标识。
其中,在该对象更新信息中提取出该目标应用程序对应的更新终端标识之前,可以获取预设对象更新服务对应的候选终端标识集合,在该候选终端标识集合的候选终端标识中确定至少一个更新终端标识,基于该待更新内存值、更新路径信息以及更新终端标识,构建针对该待更新内存对象的对象更新信息。例如,请参考图5,可以通过服务发现机制(例如zookeeper)拉取预设对象更新服务对应的终端标识集合,从而通过运营控制台,确定待更新内存对象和待更新内存值,以及在终端标识集合中选中更新终端标识,然后,可以通过消息队列投递对象更新信息对应的消息到消费者中,从而,可以通过目标应用程序对应的链接后第三方资源集合接收对象更新信息。
在步骤205中,终端在该更新终端标识中搜索与该当前终端标识匹配的目标终端标识,当存在该目标终端标识时,确定该目标应用程序在本地的本地更新权限为允许更新。
可选的,请继续参考图5,当更新终端标识中存在与该当前终端标识匹配的目标终端标识时,可以表明目标应用程序对应的终端为可进行待更新内存对象的更新的终端,也即该目标应用程序在本地的本地更新权限为允许更新,终端可以继续进行对象更新操作;当更新终端标识中不存在与该当前终端标识匹配的目标终端标识时,可以表明目标应用程序对应的终端不具有进行待更新内存对象的更新的终端的权限,也即该目标应用程序在本地的本地更新权限为不允许更新,此时,终端可以忽略对象更新操作。
在步骤206中,当该本地更新权限为允许更新时,终端基于该更新路径信息,在该对象信息集合中筛选出该待更新内存对象对应的类对象信息,获取该类对象信息对应的实例集合,并基于该目标对象信息,在该实例集合中筛选出该待更新内存对象对应的目标实例。
其中,终端基于该更新路径信息,在该对象信息集合中筛选出该待更新内存对象对应的类对象信息的方式可以有多种,比如,终端可以在更新路径信息中,提取出待更新内存对象对应的message对象的名称,也即类名称,从而可以根据类名称在该对象信息集合中筛选出该待更新内存对象对应的类对象信息,例如,可以根据待更新内存对象对应的message对象的名称,调用FindMessageTypeByName接口,在对象信息集合中查找出该待更新内存对象对应的类对象信息等。
终端在基于该更新路径信息,在该对象信息集合中筛选出该待更新内存对象对应的类对象信息之后,便可以基于该目标对象信息,在该实例集合中筛选出该待更新内存对象对应的目标实例。其中,终端基于该目标对象信息,在该实例集合中筛选出该待更新内存对象对应的目标实例的方式可以有多种,比如,可以根据该目标对象信息中待更新内存对象的字段名称,在该实例集合中筛选出该待更新内存对象对应的目标实例,例如,可以根据待更新内存对象的字段名称,调用FindFieldByName接口,在实例集合中查找出该待更新内存对象对应的目标实例等。
在步骤207中,终端获取该目标实例的反射信息,在该反射信息中提取出该目标实例与待更新内存对象之间对应的对象地址偏移,根据该对象地址偏移,在该目标应用程序对应的内存信息中筛选出该待更新内存对象匹配的目标内存对象,利用该待更新内存值,对该目标内存对象对应的内存值进行更新。
其中,相对于现有技术中通过修改配置文件来更新应用程序的内存对象的方法,本申请实施例提供的对象更新方法通过实时获取对象更新消息的变更,从而在目标应用程序运行时对目标应用程序中的内存对象进行实时更新,以此,可以避免了应用部署和发布的流程,简化了对象更新的流程,同时,可以避免每次进行对象更新时对服务进行重启,减少了对象更新的耗时,进而大大提升了对象更新的效率。
可选的,待更新内存对象的类型可以有多种,比如,可以为基本数据类型,例如,可以包括整数类型的内存对象、浮点数类型的内存对象、字符类型的内存对象、布尔类型的内存对象以及字符串类型的内存对象。其中,可选的,对于列表集合(List)以及映射集合(Map)等数据结构,可以将其字段类型定义成字符串类型,然后在修改内存值时,可以传入JSON,然后将其序列化成List或Map类型。
由以上可知,本申请实施例通过终端获取第三方资源集合,并将该第三方资源集合与目标应用程序进行链接,得到链接后第三方资源集合,通过该链接后第三方资源集合订阅预设对象更新服务对应的主题,当该主题中产生针对当前运行的目标应用程序的对象更新信息时,通过该链接后第三方资源集合接收该对象更新信息;终端获取该目标应用程序对应的对象信息集合,并基于该更新路径信息,在该对象信息集合中搜索与该待更新内存对象匹配的目标对象信息;当搜索到该目标对象信息时,终端在该对象信息集合中提取出该目标对象信息对应的更新属性信息,基于该更新属性信息,确定出该待更新内存对象对应的更新权限;当该待更新内存对象的更新权限为可更新权限时,终端在该对象更新信息中提取出该目标应用程序对应的更新终端标识,获取该目标应用程序在本地的当前终端标识;终端在该更新终端标识中搜索与该当前终端标识匹配的目标终端标识,当存在该目标终端标识时,确定该目标应用程序在本地的本地更新权限为允许更新;当该本地更新权限为允许更新时,终端基于该更新路径信息,在该对象信息集合中筛选出该待更新内存对象对应的类对象信息,获取该类对象信息对应的实例集合,并基于该目标对象信息,在该实例集合中筛选出该待更新内存对象对应的目标实例;终端获取该目标实例的反射信息,在该反射信息中提取出该目标实例与待更新内存对象之间对应的对象地址偏移,根据该对象地址偏移,在该目标应用程序对应的内存信息中筛选出该待更新内存对象匹配的目标内存对象,利用该待更新内存值,对该目标内存对象对应的内存值进行更新。以此,通过链接后第三方资源集合来实时接收针对当前运行的目标应用程序的对象更新信息,相对于现有技术中通过其他服务来获取对象更新信息,可以避免现有技术中在其他服务不可用时导致的无法正常接收对象更新信息的风险,同时,同一进程之间的信息通信,可以减少网络资源的消耗和传输时延,同时,根据对象更新信息中的更新路径信息搜索目标应用程序中是否存在待更新内存对象对应的目标对象信息,在搜索到的目标对象信息之后,确定待更新内存对象对应的更新权限以及目标应用程序对应的本地更新权限,在权限满足的条件下,根据搜索到的目标对象信息,在目标应用程序对应的内存信息中确定与待更新内存对象匹配的目标内存对象,并进行内存值的更新,无需进行应用部署、发布以及重启服务的流程,简化了对象更新流程,进而提升了对象更新的效率。
为了更好地实施以上方法,本发明实施例还提供一种对象更新装置,该对象更新装置可以集成在计算机设备中,该计算机设备可以为终端。
例如,如图7所示,为本申请实施例提供的对象更新装置的结构示意图,该对象更新装置可以包括接收单元301、搜索单元302、确定单元303和更新单元304,如下:
接收单元301,用于接收针对当前运行的目标应用程序的对象更新信息,该对象更新信息包括待更新内存对象对应的更新路径信息和待更新内存值;
搜索单元302,用于获取该目标应用程序对应的对象信息集合,并基于该更新路径信息,在该对象信息集合中搜索与该待更新内存对象匹配的目标对象信息;
确定单元303,用于根据搜索到的目标对象信息,在该目标应用程序对应的内存信息中确定与该待更新内存对象匹配的目标内存对象;
更新单元304,用于利用该待更新内存值,对该目标内存对象对应的内存值进行更新。
在一实施例中,该确定单元303,包括:
更新属性信息提取子单元,用于当搜索到该目标对象信息时,在该对象信息集合中提取出该目标对象信息对应的更新属性信息;
更新权限确定子单元,用于基于该更新属性信息,确定出该待更新内存对象对应的更新权限;
目标内存对象确定子单元,用于当该待更新内存对象的更新权限为可更新权限时,根据该目标对象信息,在该目标应用程序对应的内存信息中确定该待更新内存对象匹配的目标内存对象。
在一实施例中,该目标内存对象确定子单元,包括:
更新终端标识提取模块,用于在该对象更新信息中提取出该目标应用程序对应的更新终端标识;
本地更新权限确定模块,用于基于该更新终端标识,确定该目标应用程序在本地的本地更新权限;
确定模块,用于当该本地更新权限为允许更新时,根据该目标对象信息,在该目标应用程序对应的内存信息中确定该待更新内存对象匹配的目标内存对象。
在一实施例中,该本地更新权限确定模块,用于:
获取该目标应用程序在本地的当前终端标识;
在该更新终端标识中搜索与该当前终端标识匹配的目标终端标识;
当存在该目标终端标识时,确定该目标应用程序在本地的本地更新权限为允许更新。
在一实施例中,该确定模块,包括:
第一筛选子模块,用于基于该更新路径信息,在该对象信息集合中筛选出该待更新内存对象对应的类对象信息;
第二筛选子模块,用于获取该类对象信息对应的实例集合,并基于该目标对象信息,在该实例集合中筛选出该待更新内存对象对应的目标实例;
识别子模块,用于根据该目标实例,在该目标应用程序对应的内存信息中识别出与该待更新内存对象匹配的目标内存对象。
在一实施例中,该识别子模块,用于:
获取该目标实例的反射信息;
在该反射信息中提取出该目标实例与待更新内存对象之间对应的对象地址偏移;
根据该对象地址偏移,在该目标应用程序对应的内存信息中筛选出该待更新内存对象匹配的目标内存对象。
在一实施例中,该接收单元301,包括:
链接子单元,用于获取第三方资源集合,并将该第三方资源集合与目标应用程序进行链接,得到链接后第三方资源集合;
接收子单元,用于通过该链接后第三方资源集合,接收针对当前运行的目标应用程序的对象更新信息。
在一实施例中,该接收子单元,包括:
订阅模块,用于通过该链接后第三方资源集合订阅预设对象更新服务对应的主题;
接收模块,用于当该主题中产生针对当前运行的目标应用程序的对象更新信息时,通过该链接后第三方资源集合接收该对象更新信息。
在一实施例中,该搜索单元302,包括:
路径提取子单元,用于在该更新路径信息中提取出类路径信息和对象路径信息;
目标类对象信息筛选子单元,用于基于该类路径信息,在该对象信息集合中筛选出与该待更新内存对象对应的目标类对象信息;
目标对象信息筛选子单元,用于根据该对象路径信息,在该目标类对象信息中搜索与该待更新内存对象匹配的目标对象信息。
在一实施例中,该对象更新装置,还包括:
获取单元,用于获取候选对象集合,在该候选对象集合中选中至少一个更新内存对象;
配置单元,用于配置该更新内存对象对应的更新内存值,并生成该更新内存对象对应的当前更新路径信息;
上传单元,用于基于该更新内存值和当前更新路径信息确定当前对象更新信息,并将该当前对象更新信息上传至服务器,以便该服务器将该当前对象更新信息推送至当前运行该目标应用程序的终端。
在一实施例中,该上传单元,包括:
候选终端标识集合获取子单元,用于获取预设对象更新服务对应的候选终端标识集合,该候选终端标识集合包括至少一个候选终端标识;
更新终端标识确定子单元,用于在该候选终端标识集合的候选终端标识中确定至少一个更新终端标识;
构建子单元,用于基于该更新内存值、当前更新路径信息以及更新终端标识,构建针对该更新内存对象的当前对象更新信息。
具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的方法实施例,在此不再赘述。
由以上可知,本申请实施例通过接收单元301接收针对当前运行的目标应用程序的对象更新信息,该对象更新信息包括待更新内存对象对应的更新路径信息和待更新内存值;搜索单元302获取目标应用程序对应的对象信息集合,并基于更新路径信息,在对象信息集合中搜索与待更新内存对象匹配的目标对象信息;确定单元303根据搜索到的目标对象信息,在目标应用程序对应的内存信息中确定与待更新内存对象匹配的目标内存对象;更新单元304利用待更新内存值,对目标内存对象对应的内存值进行更新。以此,通过实时接收针对当前运行的目标应用程序的对象更新信息,并根据对象更新信息中的更新路径信息搜索目标应用程序中是否存在待更新内存对象对应的目标对象信息,从而根据搜索到的目标对象信息,在目标应用程序对应的内存信息中确定与待更新内存对象匹配的目标内存对象,并进行内存值的更新,简化了对象更新流程,进而提升了对象更新的效率。
本申请实施例还提供一种计算机设备,如图8所示,其示出了本申请实施例所涉及的计算机设备的结构示意图,该计算机设备可以是终端,具体来讲:
该计算机设备可以包括一个或者一个以上处理核心的处理器401、一个或一个以上计算机可读存储介质的存储器402、电源403和输入单元404等部件。本领域技术人员可以理解,图8中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
处理器401是该计算机设备的控制中心,利用各种接口和线路连接整个计算机设备的各个部分,通过运行或执行存储在存储器402内的软件程序和/或模块,以及调用存储在存储器402内的数据,执行计算机设备的各种功能和处理数据。可选的,处理器401可包括一个或多个处理核心;优选的,处理器401可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器401中。
存储器402可用于存储软件程序以及模块,处理器401通过运行存储在存储器402的软件程序以及模块,从而执行各种功能应用以及对象更新。存储器402可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据计算机设备的使用所创建的数据等。此外,存储器402可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器402还可以包括存储器控制器,以提供处理器401对存储器402的访问。
计算机设备还包括给各个部件供电的电源403,优选的,电源403可以通过电源管理系统与处理器401逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源403还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
该计算机设备还可包括输入单元404,该输入单元404可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
尽管未示出,计算机设备还可以包括显示单元等,在此不再赘述。具体在本实施例中,计算机设备中的处理器401会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而实现各种功能,如下:
接收针对当前运行的目标应用程序的对象更新信息,该对象更新信息包括待更新内存对象对应的更新路径信息和待更新内存值;获取目标应用程序对应的对象信息集合,并基于更新路径信息,在对象信息集合中搜索与待更新内存对象匹配的目标对象信息;根据搜索到的目标对象信息,在目标应用程序对应的内存信息中确定与待更新内存对象匹配的目标内存对象;利用待更新内存值,对目标内存对象对应的内存值进行更新。
以上各个操作的具体实施可参见前面的实施例,在此不作赘述。应当说明的是,本申请实施例提供的计算机设备与上文实施例中的适用于对象更新方法属于同一构思,其具体实现过程详见以上方法实施例,此处不再赘述。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
为此,本申请实施例提供一种计算机可读存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本申请实施例所提供的任一种对象更新方法中的步骤。例如,该指令可以执行如下步骤:
接收针对当前运行的目标应用程序的对象更新信息,该对象更新信息包括待更新内存对象对应的更新路径信息和待更新内存值;获取目标应用程序对应的对象信息集合,并基于更新路径信息,在对象信息集合中搜索与待更新内存对象匹配的目标对象信息;根据搜索到的目标对象信息,在目标应用程序对应的内存信息中确定与待更新内存对象匹配的目标内存对象;利用待更新内存值,对目标内存对象对应的内存值进行更新。
其中,该计算机可读存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
由于该计算机可读存储介质中所存储的指令,可以执行本申请实施例所提供的任一种对象更新方法中的步骤,因此,可以实现本申请实施例所提供的任一种对象更新方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
其中,根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述实施例提供的各种可选实现方式中提供的方法。
以上对本申请实施例所提供的一种对象更新方法、装置和计算机可读存储介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (15)

1.一种对象更新方法,其特征在于,包括:
接收针对当前运行的目标应用程序的对象更新信息,所述对象更新信息包括待更新内存对象对应的更新路径信息和待更新内存值;
获取所述目标应用程序对应的对象信息集合,并基于所述更新路径信息,在所述对象信息集合中搜索与所述待更新内存对象匹配的目标对象信息;
根据搜索到的目标对象信息,在所述目标应用程序对应的内存信息中确定与所述待更新内存对象匹配的目标内存对象;
利用所述待更新内存值,对所述目标内存对象对应的内存值进行更新。
2.如权利要求1所述的对象更新方法,其特征在于,所述根据搜索到的目标对象信息,在所述目标应用程序对应的内存信息中确定与所述待更新内存对象匹配的目标内存对象,包括:
当搜索到所述目标对象信息时,在所述对象信息集合中提取出所述目标对象信息对应的更新属性信息;
基于所述更新属性信息,确定出所述待更新内存对象对应的更新权限;
当所述待更新内存对象的更新权限为可更新权限时,根据所述目标对象信息,在所述目标应用程序对应的内存信息中确定所述待更新内存对象匹配的目标内存对象。
3.如权利要求2所述的对象更新方法,其特征在于,所述根据所述目标对象信息,在所述目标应用程序对应的内存信息中确定所述待更新内存对象匹配的目标内存对象,包括:
在所述对象更新信息中提取出所述目标应用程序对应的更新终端标识;
基于所述更新终端标识,确定所述目标应用程序在本地的本地更新权限;
当所述本地更新权限为允许更新时,根据所述目标对象信息,在所述目标应用程序对应的内存信息中确定所述待更新内存对象匹配的目标内存对象。
4.如权利要求3所述的对象更新方法,其特征在于,所述基于所述更新终端标识,确定所述目标应用程序在本地的本地更新权限,包括:
获取所述目标应用程序在本地的当前终端标识;
在所述更新终端标识中搜索与所述当前终端标识匹配的目标终端标识;
当存在所述目标终端标识时,确定所述目标应用程序在本地的本地更新权限为允许更新。
5.如权利要求3所述的对象更新方法,其特征在于,所述根据所述目标对象信息,在所述目标应用程序对应的内存信息中确定所述待更新内存对象匹配的目标内存对象,包括:
基于所述更新路径信息,在所述对象信息集合中筛选出所述待更新内存对象对应的类对象信息;
获取所述类对象信息对应的实例集合,并基于所述目标对象信息,在所述实例集合中筛选出所述待更新内存对象对应的目标实例;
根据所述目标实例,在所述目标应用程序对应的内存信息中识别出与所述待更新内存对象匹配的目标内存对象。
6.如权利要求5所述的对象更新方法,其特征在于,所述根据所述目标实例,在所述目标应用程序对应的内存信息中识别出与所述待更新内存对象匹配的目标内存对象,包括:
获取所述目标实例的反射信息;
在所述反射信息中提取出所述目标实例与待更新内存对象之间对应的对象地址偏移;
根据所述对象地址偏移,在所述目标应用程序对应的内存信息中筛选出所述待更新内存对象匹配的目标内存对象。
7.如权利要求1所述的对象更新方法,其特征在于,所述接收针对当前运行的目标应用程序的对象更新信息,包括:
获取第三方资源集合,并将所述第三方资源集合与目标应用程序进行链接,得到链接后第三方资源集合;
通过所述链接后第三方资源集合,接收针对当前运行的目标应用程序的对象更新信息。
8.如权利要求7所述的对象更新方法,其特征在于,所述通过所述链接后第三方资源集合,接收针对当前运行的目标应用程序的对象更新信息,包括:
通过所述链接后第三方资源集合订阅预设对象更新服务对应的主题;
当所述主题中产生针对当前运行的目标应用程序的对象更新信息时,通过所述链接后第三方资源集合接收所述对象更新信息。
9.如权利要求1所述的对象更新方法,其特征在于,所述基于所述更新路径信息,在所述对象信息集合中搜索与所述待更新内存对象匹配的目标对象信息,包括:
在所述更新路径信息中提取出类路径信息和对象路径信息;
基于所述类路径信息,在所述对象信息集合中筛选出与所述待更新内存对象对应的目标类对象信息;
根据所述对象路径信息,在所述目标类对象信息中搜索与所述待更新内存对象匹配的目标对象信息。
10.如权利要求1所述的对象更新方法,其特征在于,所述方法,还包括:
获取候选对象集合,在所述候选对象集合中选中至少一个更新内存对象;
配置所述更新内存对象对应的更新内存值,并生成所述更新内存对象对应的当前更新路径信息;
基于所述更新内存值和当前更新路径信息确定当前对象更新信息,并将所述当前对象更新信息上传至服务器,以便所述服务器将所述当前对象更新信息推送至当前运行所述目标应用程序的终端。
11.如权利要求10所述的对象更新方法,其特征在于,所述基于所述更新内存值和当前更新路径信息确定当前对象更新信息,包括:
获取预设对象更新服务对应的候选终端标识集合,所述候选终端标识集合包括至少一个候选终端标识;
在所述候选终端标识集合的候选终端标识中确定至少一个更新终端标识;
基于所述更新内存值、当前更新路径信息以及更新终端标识,构建针对所述更新内存对象的当前对象更新信息。
12.一种对象更新装置,其特征在于,包括:
接收单元,用于接收针对当前运行的目标应用程序的对象更新信息,所述对象更新信息包括待更新内存对象对应的更新路径信息和待更新内存值;
搜索单元,用于获取所述目标应用程序对应的对象信息集合,并基于所述更新路径信息,在所述对象信息集合中搜索与所述待更新内存对象匹配的目标对象信息;
确定单元,用于根据搜索到的目标对象信息,在所述目标应用程序对应的内存信息中确定与所述待更新内存对象匹配的目标内存对象;
更新单元,用于利用所述待更新内存值,对所述目标内存对象对应的内存值进行更新。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行权利要求1至11任一项所述的对象更新方法中的步骤。
14.一种计算机设备,其特征在于,包括存储器、处理器以及存储在所述存储器中并可以在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现权利要求1至11中任一项所述的对象更新方法。
15.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序/指令,所述计算机程序/指令被处理器执行时实现权利要求1至11任一项所述的对象更新方法中的步骤。
CN202210378538.0A 2022-04-12 2022-04-12 对象更新方法、装置和计算机可读存储介质 Pending CN116954678A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210378538.0A CN116954678A (zh) 2022-04-12 2022-04-12 对象更新方法、装置和计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210378538.0A CN116954678A (zh) 2022-04-12 2022-04-12 对象更新方法、装置和计算机可读存储介质

Publications (1)

Publication Number Publication Date
CN116954678A true CN116954678A (zh) 2023-10-27

Family

ID=88441294

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210378538.0A Pending CN116954678A (zh) 2022-04-12 2022-04-12 对象更新方法、装置和计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN116954678A (zh)

Similar Documents

Publication Publication Date Title
US10467025B2 (en) Managing delivery of code and dependent data using application containers
US8312451B2 (en) Computing system for providing software components on demand to a mobile device
CN109391509A (zh) 一种更新应用程序的方法、系统及应用服务器
US11663037B2 (en) Service information processing method, apparatus, device and computer storage medium
US11893367B2 (en) Source code conversion from application program interface to policy document
CN109783159B (zh) 基于配置信息的应用启动方法和装置
CN110888658A (zh) 应用程序中功能模块的动态化方法、装置及存储介质
CN114222003A (zh) 服务调用方法、系统、装置、设备及存储介质
CN112256351B (zh) Feign组件的实现方法、微服务调用方法及装置
CN111625250B (zh) 应用更新方法、装置、存储介质及电子设备
WO2023124657A1 (zh) 微应用的运行方法、装置、设备、存储介质及程序产品
CN116954678A (zh) 对象更新方法、装置和计算机可读存储介质
CN112691382B (zh) 资源处理方法、装置及计算机可读存储介质
CN113791809B (zh) 应用异常处理方法、装置以及计算机可读存储介质
WO2021129853A1 (zh) 移动服务升级方法、装置和终端
CN115344644A (zh) 数据同步方法、装置、电子设备和计算机可读存储介质
CN114860202A (zh) 项目运行方法、装置、服务器及存储介质
CN114995970A (zh) 任务处理方法、装置、存储介质及电子设备
CN114676371A (zh) 页面的元素信息替换方法、装置、计算机设备及存储介质
CN115964061A (zh) 插件更新方法、装置、电子设备和计算机可读存储介质
CN110324722B (zh) 直播间中数据的获取方法、装置、设备和存储介质
CN108733401B (zh) 一种实现浏览器兼容的方法及装置
CN111190637A (zh) 一种版本文件发布的管理方法、装置以及系统
CN114924809B (zh) 一种基于dex文件类的流式微服务加载验证方法
CN113590166B (zh) 应用程序的更新方法、装置以及计算机可读存储介质

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