QPlugins的一些设计构想讨论

讨论时间:2014-12-29

讨论范围:QDAC官方QQ群

讨论内容:

(1)、QPlugins 大概的实现时间约在2015年春末夏初。

(2)、QPlugins 将是一种微内核的插件框架,内核只管理以下事情:

  • 插件的注册/反注册
  • 插件实例的集中调度(查询、创建、释放)
  • 扫描并加载各种加载器(Loader)

(3)、QPlugins 的加载器负责以下事件:

  • 扫描自己支持的插件,并向内核注册插件信息。至于扫描是通过直接扫描特定目录下特定扩展名的文件还是通过配置文件来获取,则于加载器自己决定。
  • 根据内核的调度,创建和释放插件实例;
  • 一般来说,如果有配置文件,则加载器应通过实现一个集中的配置管理插件实例,来加载配置信息。而这个插件如果是由本加载器提供的,则要先注册该插件。

(4)、QPlugins 要实现不停机更新的插件,则插件必需实现并处理保存状态和恢复状态的相关接口。否则,更新将只能在插件无任何引用时,由插件管理器负责更新,或者在更新后重新启动应用本身才能生效。

(5)、QPlugins 中插件之间信息的共享,通过特定的插件进行提供。在 Windows 上可以使用 ShareMemory、NamePipe 实现,在 Linux 上可以使用 DomainSocket 实现,具体实现方式方法取决于相关的插件,如果没有安装相关类型的插件,则插件间无法共享数据。

(6)、QPlugins 中插件访问命令行的方式,由插件自己访问信息共享插件实现。宿主应用实际上只是将这些数据通过信息共享传送,但插件怎么访问,宿主应用并不知晓。

(7)、理论上,QPlugins 通过扩展加载器的方式,会支持各种不同类型的插件,如DLL、BPL、脚本、单机内进程。以及将来 QSocket 实现完成后,完成远程插件的注册管理及调用。

分享到: