一种跨平台多进程的插件管理与过程调用方法技术

技术编号:30138815 阅读:19 留言:0更新日期:2021-09-23 14:55
本发明专利技术公开了一种跨平台多进程的插件管理与过程调用方法,读取插件的描述文件,获取插件类型,根据插件类型选择合适的插件加载方式,注册基础服务,包括服务注册、服务调用和服务注销,在维护服务中心的服务注册表记录所有插件的服务信息;实现了代码的跨平台编译及运行,无需根据操作系统修改代码,在Windows系统、中标麒麟、银河麒麟都可以保证正常运行;简化了跨进程的过程调用方法,无需关注底层实现,降低了进程插件的开发难度;多进程插件的应用可以将插件的质量问题隔离在进程内部,某插件的崩溃只会影响本进程,不会影响到其他进程中插件的正常使用。程中插件的正常使用。程中插件的正常使用。

【技术实现步骤摘要】
stopPlugin服务。
[0013]过程调用:包括服务注册、服务调用和服务注销,在维护服务中心的服务注册表记录所 有插件的服务信息。
[0014]进一步的,在多种操作系统的适配场景中,结合Qt和D

Bus实现跨平台过程调用。
[0015]进一步的,服务注册时,主进程和其他进程中各创建一个服务中心,其他进程的服务中 心管理本进程内的服务,通过RPC管理器将本进程内的服务信息同步到主进程的服务中心, 由主进程全局维护一份服务信息表。
[0016]进一步的,服务调用时,从主进程的服务中心调取所需的服务信息,若服务定义方和调 用方在同一进程,则采用反射调用,否则采用跨进程调用。
[0017]进一步的,服务注销时,采用引用计数方式获取服务的使用情况,在主进程空闲时注销 服务。
[0018]本专利技术的有益效果:基于Qt开发,实现了代码的跨平台编译及运行,无需根据操作系 统修改代码,在Windows系统、中标麒麟、银河麒麟都可以保证正常运行;简化了跨进程的 过程调用方法,过程调用的流程进行了封装,用户添加自定义服务时,无需关注底层实现, 降低了进程插件的开发难度;多进程插件的应用可以将插件的质量问题隔离在进程内部,某 插件的崩溃只会影响本进程,不会影响到其他进程中插件的正常使用,提高了系统稳定性。
附图说明
[0019]图1是插件分类图,图2是服务设计图,图3是服务生命周期图,图4是插件文件说明 图,图5是插件加载流程图,图6是服务注册流程图,图7是服务调用流程图,图8是服务 注销流程图。
具体实施方式
[0020]以下结合附图对本专利技术的技术方案做具体的说明。
[0021]插件包括动态库插件和进程插件,如图1所示,动态库插件运行于主进程中,进程插件 运行于新的独立进程中,进程插件和动态库插件需要实现start启动插件和stop停止插件接 口。
[0022]插件加载时,通过插件的描述文件获取插件类型,用QPluginLoader将动态库插件加载 到主进程中,用QProcesss启动进程插件的可执行程序文件,动态库插件和进程插件需要在 插件加载阶段向D

Bus注册启动或停止插件服务,用于后续动态插拔插件。
[0023]服务提供方插件负责提供接口,将接口注册到服务中心,服务调用方插件负责调用接口, 主进程的服务中心负责管理各个插件注册的服务,在全局作用域内维护一份服务注册表,服 务定义方将服务信息注册到服务中心,同时将服务注册到D

Bus,如图2所示。
[0024]过程调用的整个生命周期分为注册服务、调用服务和注销服务,如图3所示。
[0025]注册服务的过程是维护服务注册表的过程,主进程中插件将服务直接注册到D

Bus,将 服务内容封装成服务项注册到服务中心中,其他进程的插件将服务直接注册到D

Bus,将 D

Bus中的服务信息封装成服务项,通过跨进程调用服务中心的服务注册接口,将该进程的 服务内容注册到主进程中的服务中心,达到全局维护一份服务表的目的。
[0026]主进程的服务中心需要提供获取服务接口,将该接口注册到D

Bus,插件从主进程的服 务中心中获取服务信息,如果服务在主进程中,直接反射调用,如果服务定义在其他进程, 则根据服务注册信息中的D

Bus相关描述,向D

Bus发起过程调用,并返回结果。
[0027]其他进程的插件向服务中心发起服务调用,获取服务的注册信息,返回结果包含了服务 在D

Bus中的注册信息,基于这些信息,向D

Bus发起过程调用,并返回结果。
[0028]注销服务由主进程管理动态库插件及进程插件,当主进程停止某个插件时,会触发注销 服务机制,对该插件使用的服务及其提供的服务进行管理和注销。
[0029]每个插件具有一份名称为MANIFEST.MF描述性文件,如图4所示,对插件的唯一名称、 版本、类型、加载方式等进行了描述,加载插件前读取该文件,并存储相关信息。
[0030]每个插件的入口类需要实现start和stop接口,start接口为插件的启动函数,可在插 件启动时注册服务、获取服务、初始化界面等,stop接口是停止插件函数,可在停止插件 时释放资源。
[0031]插件加载的具体流程如图5所示,由于存在多进程,各个插件最终分散运行于多个进程 中,在运行过程中,如果需要跨进程对插件进行操作,则调用插件提供的服务,每个插件在 启动时注册startPlugin和stopPlugin服务,并在start函数中根据需要注册自定义服务。
[0032]服务中心主要负责管理插件注册的服务,并提供服务生命周期管理、服务查找、获取服 务引用和实例、注销和服务释放等功能。
[0033]插件遵循契约的方式,对外提供一个或多个服务,服务包含接口名称、接口类名和用户 为其设置的唯一标识,ID字符串是可选的。
[0034]当使用服务的插件被停止或卸载时,需要释放其对服务的引用;当提供服务的插件被停 止或卸载时,需要释放所有的服务引用,并停止使用该服务的插件。
[0035]插件注册到服务工厂的服务将被包装形成服务注册项,包括该服务所属的插件名、接口 名、接口类名以及引用了该服务的插件列表,插件可以通过这些信息查询、使用最合适的服 务。
[0036]服务使用插件根据服务的接口名称和接口类名从服务工厂中获取服务注册项列表,根据 服务的其他属性确定所需的服务注册项,获取服务时将记录服务使用方插件对该服务的引用, 服务注册项通过拷贝或赋值操作,增加该服务的引用计数,当服务注册项被销毁时,减少引 用计数。
[0037]服务引用管理服务的引用计数,当其引用计数减少至0时,其管理的服务将不再有效, 服务中心通过管理服务的引用计数,管理服务的生命周期。
[0038]服务提供方插件可能运行于主进程中或者其他进程中,为了达到主进程中全局维护一份 服务信息表的目的,主进程和其他进程中都创建一个服务中心,其他进程的服务中心负责管 理本进程内的服务,通过RPC管理器,将本进程内的服务信息注册到主进程的服务中心中。
[0039]服务注册流程如图6所示,RPC管理器提供OnRegisterInterface和OnGetInterfaces 两个服务,创建RPC管理器时,将这两个服务注册到D

Bus中。
[0040]为了避免服务的重复注册、频繁与主进程进行过程调用,在进程内部存储一份服务信息 表,注册服务时,先在进程内部检验服务信息,如果已经注册了,则不再注册,服务
注册项 用于封装服务信息,重写序列化和反序列函数,以便在过程调用中传递参数。
[0041]其他进程中的服务注册到主进程的服务中心时,需要调用RPC管理器提供的 OnRegiste本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种跨平台多进程的插件管理与过程调用方法,其特征在于,包括:插件管理:读取插件的描述文件,获取插件类型,根据插件类型选择合适的插件加载方式,注册基础服务;过程调用:包括服务注册、服务调用和服务注销,在维护服务中心的服务注册表记录所有插件的服务信息。2.根据权利要求1所述的跨平台多进程的插件管理与过程调用方法,其特征在于,所述插件管理,包括:插件包括进程插件和动态库插件,建立MANIFEST.MF文件描述插件信息,插件信息包括插件的id、版本、类型、加载方式。3.根据权利要求1所述的跨平台多进程的插件管理与过程调用方法,其特征在于,所述插件管理,包括:插件包括start和stop接口,在插件启动时,默认注册startPlugin和stopPlugin服务。4.根据权利要求1所述的跨平台多进程的插件管理与过程调用方法,其特征在于,所...

【专利技术属性】
技术研发人员:李维刘国炜
申请(专利权)人:中国电子科技集团公司第十四研究所
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1