Tufao1.2.1文档翻译:Tufão的插件系统,Tufão's plugin system
在开发网页程序时,妳通常会面临一个问题,就是,所开发的程序需要长年持续运行而不停止。
通常,在解释型语言中,对于这个问题的解决办法就是,每当它发生变化时便重新载入源文件。在C++中,我们可以通过插件来做出类似的行为。
Tufão提供 了 Tufao::HttpPluginServer 类和一个QtCreator 插件,来将Qt 插件与 Tufao::HttpServerRequestRouter 整合在一起。
为了理解 Tufão 的插件系统,让我们再重新看一下 重新研究 一下世界妳好! 中编写的那个程序。 这个程序的代码应当与Tufão 的QtCreator 插件通过 application 模板生成的代码相同。
Tufao::HttpServerRequestRouter 提供 了一个健壮的路由接口,如果 我们可以告诉它来将文件系统上的某个插件当作处理器来使用的话,那么会狠好用。这个,就是 Tufao::HttpPluginServer 所做的事。
Tufao::HttpPluginServer 实现 了 Tufao::AbstractHttpServerRequestHandler 接口,因此, 妳可以在 Tufao::HttpServerRequestRouter 中使用它来作为一个处理器。 Tufao::HttpPluginServer 有着它自己的映射规则和处理器集合,但是,它会从插件中载入处理器。
在之前创建的插件服务器中,我们给构造函数传入了一个文件。这就是我们向 Tufao::HttpPluginServer 设置插件的方式。 这个文件可使用任何文本编辑器来编辑,当它发生改变时, Tufão 会重新载入它。参考 Tufao::HttpPluginServer::setConfig 以学习该如何编辑这个文件。
插件(plugin)模板
废话少说 !开始创建插件。首先 ,妳必须启动 QtCreator ,打开 新项目 创建 对话框,选择 Tufão 网页服务器项目( Tufão Web Server project )下的插件( plugin )模板。
将会生成以下文件:
•. *.pro: 这个文件的名字取决于项目的名字。 它会告诉 qmake 要使用库( lib )模板( TEMPLATE )和插件( plugin )配置选项( CONFIG )。
•. plugin.h: 定义 一个实现了 Tufao::HttpServerPlugin 接口的类, Tufao::HttpPluginServer 需要它。
•.plugin.cpp: 包含着Plugin 类的成员函数的实现代码。
Tufao::HttpServerPlugin 类只是被 Tufao::HttpPluginServer 使用的一个 工厂 ,用来实例 化新的处理器对象。如果 妳想创建一个能被 Tufao::HttpPluginServer 使用的插件的话,那么,妳必须这么做:
1.使用Qt的插件系统
a.创建一个基于qmake的项目
b. 使用 lib 模板 和 plugin 配置选项
2. 在这个插件类中实现 Tufao::HttpServerPlugin 接口( 别忘了带上 Q_INTERFACES 宏 )
3.使用Q_PLUGIN_METADATA来向Qt 告知妳的插件的元数据
参考 Tufao::HttpServerPlugin 以了解更多细节。
最后我们将创建出两个东西:
•. 一个支持插件的程序
•. 一个插件
唯一缺少的东西就是,要告诉这个程序来使用我们刚才创建的插件。要做到那一点的话,我们需要:
•. 编辑 我们的程序中插件服务器所使用的那个配置文件。 在前面写的那个程序中,这个配置文件就是程序的工作目录中一个名为 routes.json 的文件。
以下是一个简单的示例(妳可以自己修改并在日后使用它):
{
"version": 0,
"plugins": [
{
"name": "myplugin",
"path": "/path/to/your/plugin/binary"
}
],
"requests": [
{
"path": "^/plugin$",
"plugin": "myplugin"
}
]
}
之前 ,当妳运行这个程序时, Tufão尝试 过寻找 routes.json 文件 ,但是失败了。现在, 妳可以重启那个程序, 这次,程序将会成功找到 routes.json 文件。
当 Tufão 找到 routes.json 文件之后 ,就会持续监视该文件,当文件发生变化时便重新载入各个插件。
参考
Your opinionsHxLauncher: Launch Android applications by voice commands