CN113419783B - 一种跨平台多进程的插件管理与过程调用方法 - Google Patents
一种跨平台多进程的插件管理与过程调用方法 Download PDFInfo
- Publication number
- CN113419783B CN113419783B CN202110673017.3A CN202110673017A CN113419783B CN 113419783 B CN113419783 B CN 113419783B CN 202110673017 A CN202110673017 A CN 202110673017A CN 113419783 B CN113419783 B CN 113419783B
- Authority
- CN
- China
- Prior art keywords
- plug
- service
- cross
- management
- procedure call
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种跨平台多进程的插件管理与过程调用方法,读取插件的描述文件,获取插件类型,根据插件类型选择合适的插件加载方式,注册基础服务,包括服务注册、服务调用和服务注销,在维护服务中心的服务注册表记录所有插件的服务信息;实现了代码的跨平台编译及运行,无需根据操作系统修改代码,在Windows系统、中标麒麟、银河麒麟都可以保证正常运行;简化了跨进程的过程调用方法,无需关注底层实现,降低了进程插件的开发难度;多进程插件的应用可以将插件的质量问题隔离在进程内部,某插件的崩溃只会影响本进程,不会影响到其他进程中插件的正常使用。
Description
技术领域
本发明属于计算机技术领域,具体涉及一种进程管理技术。
背景技术
国产化自主可控趋势下,使用国产化操作系统开发军事应用软件已然成为一种趋势。以 前基于Windows系统开发的军事软件需要升级改造,向国产化平台移植。现阶段,银河麒麟、 中标麒麟等国产化操作系统成为军事领域使用较多的操作系统,软件适配多型号平台成为了 开发工程师的重要工作。
软件开发中,将大型软件按照功能模块划分成多个插件由框架集成运行的方式,获得了 很多软件开发单位的青睐。插件由多家单位开发,将所有插件运行于同一个进程中,如果某 家单位的插件存在质量问题,会影响整个系统的效率和稳定。
基于进程隔离的思想,将进程设计为多进程运行,某个插件的崩溃只会影响所在进程, 其他进程中的插件不受影响。
多进程插件在实际使用中,各个插件之间避免不了过程调用。多进程插件的过程调用是 进程级别的函数调用,在跨平台场景下实现多进程插件之间的管理及过程调用,成为需要解 决的问题。
在跨平台场景中,涉及多种类型的操作系统,使用Qt来屏蔽操作系统对上层应用开发 的影响。Qt是跨平台的C++应用程序开发库,可在Windows、中标麒麟、银河麒麟操作系统中开发应用程序。Qt支持插件开发,采用Qt开发的插件可以跨平台编译和运行。
Qt支持插件机制:如果插件运行于主进程中,可将插件设计为动态库插件,用QPluginLoader加载该插件;如果插件运行于独立的进程中,可将插件设计为进程插件,用QProcess启动该进程插件,利用D-Bus做进程间的过程调用。
过程调用过程中,被调用方提供的接口也称为服务。D-Bus是一个低延迟、低开销、高 可用性的进程间通信机制,Windows、中标麒麟、银河麒麟都支持D-Bus,QDBus是Qt对 D-Bus底层API的封装实现。
发明内容
本发明为了解决现有技术存在兼容平台场景下如何进行多进程插件的管理及过程调用的 问题,提出了一种跨平台多进程的插件管理与过程调用方法,在Windows、中标麒麟、银河 麒麟多个平台场景下,提供进程插件的管理、服务注册、服务调用、服务注销等,为了实现 上述目的,本发明采用了以下技术方案。
插件管理:读取插件的描述文件,获取插件类型,根据插件类型选择合适的插件加载方 式,注册基础服务。
进一步的,插件包括进程插件和动态库插件,建立MANIFEST.MF文件描述插件信息, 插件信息包括插件的id、版本、类型、加载方式。
进一步的,插件包括start和stop接口,在插件启动时,默认注册startPlugin和stopPlugin服务。
过程调用:包括服务注册、服务调用和服务注销,在维护服务中心的服务注册表记录所 有插件的服务信息。
进一步的,在多种操作系统的适配场景中,结合Qt和D-Bus实现跨平台过程调用。
进一步的,服务注册时,主进程和其他进程中各创建一个服务中心,其他进程的服务中 心管理本进程内的服务,通过RPC管理器将本进程内的服务信息同步到主进程的服务中心, 由主进程全局维护一份服务信息表。
进一步的,服务调用时,从主进程的服务中心调取所需的服务信息,若服务定义方和调 用方在同一进程,则采用反射调用,否则采用跨进程调用。
进一步的,服务注销时,采用引用计数方式获取服务的使用情况,在主进程空闲时注销 服务。
本发明的有益效果:基于Qt开发,实现了代码的跨平台编译及运行,无需根据操作系 统修改代码,在Windows系统、中标麒麟、银河麒麟都可以保证正常运行;简化了跨进程的 过程调用方法,过程调用的流程进行了封装,用户添加自定义服务时,无需关注底层实现, 降低了进程插件的开发难度;多进程插件的应用可以将插件的质量问题隔离在进程内部,某 插件的崩溃只会影响本进程,不会影响到其他进程中插件的正常使用,提高了系统稳定性。
附图说明
图1是插件分类图,图2是服务设计图,图3是服务生命周期图,图4是插件文件说明图,图5是插件加载流程图,图6是服务注册流程图,图7是服务调用流程图,图8是服务 注销流程图。
具体实施方式
以下结合附图对本发明的技术方案做具体的说明。
插件包括动态库插件和进程插件,如图1所示,动态库插件运行于主进程中,进程插件 运行于新的独立进程中,进程插件和动态库插件需要实现start启动插件和stop停止插件接 口。
插件加载时,通过插件的描述文件获取插件类型,用QPluginLoader将动态库插件加载 到主进程中,用QProcesss启动进程插件的可执行程序文件,动态库插件和进程插件需要在 插件加载阶段向D-Bus注册启动或停止插件服务,用于后续动态插拔插件。
服务提供方插件负责提供接口,将接口注册到服务中心,服务调用方插件负责调用接口, 主进程的服务中心负责管理各个插件注册的服务,在全局作用域内维护一份服务注册表,服 务定义方将服务信息注册到服务中心,同时将服务注册到D-Bus,如图2所示。
过程调用的整个生命周期分为注册服务、调用服务和注销服务,如图3所示。
注册服务的过程是维护服务注册表的过程,主进程中插件将服务直接注册到D-Bus,将 服务内容封装成服务项注册到服务中心中,其他进程的插件将服务直接注册到D-Bus,将 D-Bus中的服务信息封装成服务项,通过跨进程调用服务中心的服务注册接口,将该进程的 服务内容注册到主进程中的服务中心,达到全局维护一份服务表的目的。
主进程的服务中心需要提供获取服务接口,将该接口注册到D-Bus,插件从主进程的服 务中心中获取服务信息,如果服务在主进程中,直接反射调用,如果服务定义在其他进程, 则根据服务注册信息中的D-Bus相关描述,向D-Bus发起过程调用,并返回结果。
其他进程的插件向服务中心发起服务调用,获取服务的注册信息,返回结果包含了服务 在D-Bus中的注册信息,基于这些信息,向D-Bus发起过程调用,并返回结果。
注销服务由主进程管理动态库插件及进程插件,当主进程停止某个插件时,会触发注销 服务机制,对该插件使用的服务及其提供的服务进行管理和注销。
每个插件具有一份名称为MANIFEST.MF描述性文件,如图4所示,对插件的唯一名称、 版本、类型、加载方式等进行了描述,加载插件前读取该文件,并存储相关信息。
每个插件的入口类需要实现start和stop接口,start接口为插件的启动函数,可在插 件启动时注册服务、获取服务、初始化界面等,stop接口是停止插件函数,可在停止插件 时释放资源。
插件加载的具体流程如图5所示,由于存在多进程,各个插件最终分散运行于多个进程 中,在运行过程中,如果需要跨进程对插件进行操作,则调用插件提供的服务,每个插件在 启动时注册startPlugin和stopPlugin服务,并在start函数中根据需要注册自定义服务。
服务中心主要负责管理插件注册的服务,并提供服务生命周期管理、服务查找、获取服 务引用和实例、注销和服务释放等功能。
插件遵循契约的方式,对外提供一个或多个服务,服务包含接口名称、接口类名和用户 为其设置的唯一标识,ID字符串是可选的。
当使用服务的插件被停止或卸载时,需要释放其对服务的引用;当提供服务的插件被停 止或卸载时,需要释放所有的服务引用,并停止使用该服务的插件。
插件注册到服务工厂的服务将被包装形成服务注册项,包括该服务所属的插件名、接口 名、接口类名以及引用了该服务的插件列表,插件可以通过这些信息查询、使用最合适的服 务。
服务使用插件根据服务的接口名称和接口类名从服务工厂中获取服务注册项列表,根据 服务的其他属性确定所需的服务注册项,获取服务时将记录服务使用方插件对该服务的引用, 服务注册项通过拷贝或赋值操作,增加该服务的引用计数,当服务注册项被销毁时,减少引 用计数。
服务引用管理服务的引用计数,当其引用计数减少至0时,其管理的服务将不再有效, 服务中心通过管理服务的引用计数,管理服务的生命周期。
服务提供方插件可能运行于主进程中或者其他进程中,为了达到主进程中全局维护一份 服务信息表的目的,主进程和其他进程中都创建一个服务中心,其他进程的服务中心负责管 理本进程内的服务,通过RPC管理器,将本进程内的服务信息注册到主进程的服务中心中。
服务注册流程如图6所示,RPC管理器提供OnRegisterInterface和OnGetInterfaces 两个服务,创建RPC管理器时,将这两个服务注册到D-Bus中。
为了避免服务的重复注册、频繁与主进程进行过程调用,在进程内部存储一份服务信息 表,注册服务时,先在进程内部检验服务信息,如果已经注册了,则不再注册,服务注册项 用于封装服务信息,重写序列化和反序列函数,以便在过程调用中传递参数。
其他进程中的服务注册到主进程的服务中心时,需要调用RPC管理器提供的OnRegisterInterface服务,将服务注册项对象序列化,通过D-Bus传递到主进程的RPC管理器中,RPC管理器对服务注册项反序列化,将服务信息注册到主进程的服务中心中。
服务调用分为服务的查找和服务的调用两个过程,服务调用流程如图7所示。
服务查找主要是将服务相关信息发送到主进程的服务中心中,由服务中心查找相应的服 务列表,并返回给服务调用方插件。
服务调用方插件插件根据服务信息发起服务调用,如果服务调用方插件运行在主进程中, 则直接调用服务中心的查找服务接口,如果服务调用方运行在其他进程中,需要通过D-Bus 调用RPC管理器的OnRegisterInterface服务,由OnRegisterInterface服务调用服务中心 的查找服务接口并返回服务注册项列表。
调用服务时,如果调用方插件和定义方插件运行在同一个进程中,则可以获取服务对象 的指针,通过反射调用函数接口;否则,需要通过D-Bus调用相应服务。
停止某个插件时,需要对其提供的服务和使用的服务进行清理。服务注销流程如图8所 示。
服务注销功能主要发生在主进程的服务中心,服务中心根据停止的插件ID,遍历服务中 心注册的服务项,遍历服务注册项,如果该服务被插件使用,则移除插件对该服务的引用, 同时将服务引用计数减1,如果该服务的引用计数清零,则析构该服务,如果该插件在服务 中心注册过服务,则将该插件提供的服务移除,其他插件也就无法再查询到该服务,进而无 法再使用该插件的服务。
上述作为本发明的实施例,并不限制本发明,凡在本发明的精神和原则之内所作的任何 修改、等同替换和改进等,均包含在本发明的保护范围之内。
Claims (7)
1.一种跨平台多进程的插件管理与过程调用方法,其特征在于,包括:插件管理:读取插件的描述文件,获取插件类型,根据插件类型选择合适的插件加载方式,注册基础服务;过程调用:包括服务注册、服务调用和服务注销,在维护服务中心的服务注册表记录所有插件的服务信息;插件加载时,通过插件的描述文件获取插件类型,用QPluginLoader将动态库插件加载到主进程中,用QProcesss启动进程插件的可执行程序文件,动态库插件和进程插件需要在插件加载阶段向D-Bus注册启动或停止插件服务,用于后续动态插拔插件。
2.根据权利要求1所述的跨平台多进程的插件管理与过程调用方法,其特征在于,所述插件管理,包括:插件包括进程插件和动态库插件,建立MANIFEST.MF文件描述插件信息,插件信息包括插件的id、版本、类型、加载方式。
3.根据权利要求1所述的跨平台多进程的插件管理与过程调用方法,其特征在于,所述插件管理,包括:插件包括start和stop接口,在插件启动时,默认注册startPlugin和stopPlugin服务。
4.根据权利要求1所述的跨平台多进程的插件管理与过程调用方法,其特征在于,所述过程调用,包括:在多种操作系统的适配场景中,结合Qt和D-Bus实现跨平台过程调用。
5.根据权利要求4所述的跨平台多进程的插件管理与过程调用方法,其特征在于,所述服务注册,包括:主进程和其他进程中各创建一个服务中心,其他进程的服务中心管理本进程内的服务,通过RPC管理器将本进程内的服务信息同步到主进程的服务中心,由主进程全局维护一份服务信息表。
6.根据权利要求4所述的跨平台多进程的插件管理与过程调用方法,其特征在于,所述服务调用,包括:从主进程的服务中心调取所需的服务信息,若服务定义方和调用方在同一进程,则采用反射调用,否则采用跨进程调用。
7.根据权利要求4所述的跨平台多进程的插件管理与过程调用方法,其特征在于,所述服务注销,包括:采用引用计数方式获取服务的使用情况,在主进程空闲时注销服务。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2021104584308 | 2021-04-27 | ||
CN202110458430 | 2021-04-27 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113419783A CN113419783A (zh) | 2021-09-21 |
CN113419783B true CN113419783B (zh) | 2023-09-19 |
Family
ID=77788863
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110673017.3A Active CN113419783B (zh) | 2021-04-27 | 2021-06-17 | 一种跨平台多进程的插件管理与过程调用方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113419783B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113821363B (zh) * | 2021-11-25 | 2022-03-01 | 北京鲸鲮信息系统技术有限公司 | 一种进程间通讯方法及系统 |
CN116700834B (zh) * | 2023-08-07 | 2023-10-24 | 天津华来科技股份有限公司 | 一种App模块化加载方法及系统 |
CN117076159B (zh) * | 2023-10-10 | 2024-01-05 | 统信软件技术有限公司 | 插件调用方法及装置、电子设备、计算机可读存储介质 |
CN117632441A (zh) * | 2024-01-25 | 2024-03-01 | 快应数科(北京)科技有限公司 | 基于流程画布的数据采集方法、装置、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6633923B1 (en) * | 1999-01-29 | 2003-10-14 | Iona Technologies Inc. | Method and system for dynamic configuration of interceptors in a client-server environment |
CN104216738A (zh) * | 2014-08-20 | 2014-12-17 | 北京奇艺世纪科技有限公司 | 一种应用程序的运行方法及装置 |
CN107613312A (zh) * | 2017-10-09 | 2018-01-19 | 武汉斗鱼网络科技有限公司 | 一种直播的方法和装置 |
CN111596969A (zh) * | 2020-05-09 | 2020-08-28 | 中国电子科技集团公司第二十八研究所 | 一种基于微内核加插件式的软件架构方法 |
-
2021
- 2021-06-17 CN CN202110673017.3A patent/CN113419783B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6633923B1 (en) * | 1999-01-29 | 2003-10-14 | Iona Technologies Inc. | Method and system for dynamic configuration of interceptors in a client-server environment |
CN104216738A (zh) * | 2014-08-20 | 2014-12-17 | 北京奇艺世纪科技有限公司 | 一种应用程序的运行方法及装置 |
CN107613312A (zh) * | 2017-10-09 | 2018-01-19 | 武汉斗鱼网络科技有限公司 | 一种直播的方法和装置 |
CN111596969A (zh) * | 2020-05-09 | 2020-08-28 | 中国电子科技集团公司第二十八研究所 | 一种基于微内核加插件式的软件架构方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113419783A (zh) | 2021-09-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113419783B (zh) | 一种跨平台多进程的插件管理与过程调用方法 | |
US10474559B2 (en) | System for distributed software quality improvement | |
EP3198436B1 (en) | System and method for providing an end-to-end lifecycle in a multitenant application server environment | |
US20080270986A1 (en) | System and method for enterprise javabeans container | |
CN105302575A (zh) | 一种基础开发框架 | |
US20060029054A1 (en) | System and method for modeling and dynamically deploying services into a distributed networking architecture | |
US20160285958A1 (en) | Application container for live migration of mobile applications | |
US20060129983A1 (en) | Apparatus, system, and method for sharing and accessing data by scopes | |
US7770159B2 (en) | Virtual types | |
CN110532074A (zh) | 一种多租户模式SaaS服务集群环境的任务调度方法及系统 | |
CN108363612A (zh) | 基于类装载器实现的j2ee模块热部署及调用信息统计方法 | |
US20050022208A1 (en) | Corba gateway | |
CN107239313A (zh) | Spring应用服务的升级方法和存储介质 | |
CN113986449A (zh) | 一种面向容器的Linux内核虚拟化系统及方法 | |
CN108228274B (zh) | 一种机载分布式任务动态分配及动态构建技术的实现方法 | |
US20110289307A1 (en) | System and method for direct switching of data content | |
CN115543546A (zh) | 一种基于Spring的模块热部署方法及系统 | |
CN112685020A (zh) | 动态创建服务接口的方法、装置、电子设备及存储介质 | |
CN107632885A (zh) | 组件间的回调管理方法和装置 | |
CN102508673B (zh) | 快速开发与配置平台类软件的系统及方法 | |
CN114489585A (zh) | 一种治理功能插件化的微服务开发框架及实现方法 | |
CN101179414A (zh) | 一种在上级网管中集成下级网管功能的方法 | |
CN116680003A (zh) | 前端插件化系统 | |
CN112445851A (zh) | 一种插拔式orm框架实现方法、装置、电子设备和存储介质 | |
JP2011118867A (ja) | 遠隔プラグイン装置、ロボットプラグイン実行エンジン装置及びロボットプラグイン実行システム |
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 |