appbase位于libraries目录,该库主要实现了一个简单的插件式架构。
AppBase负责管理插件的生命循环。花了一个小时看了下,整个结构很简单也很精简小巧。感觉都没什么值得分析的。。只谈重点:
AppBase 利用单例模式实现,用appbase::app() 可以访问,它内部有私有变量boost::asio::io_service。当调用appbase::exec()时,执行了io_service::run(),进入无限循环等待。
当插件 plugin需要执行IO或者其他异步操作时,需要调用app().get_io_service().post( lambda );
当需要关闭时,调用appbase::app().quit(),或者发送SIGTERM/SIGINT信号(比如Ctrl +C).
直接分析例子:
appbase例子 APPBASE_PLUGIN_REQUIRES注意APPBASE_PLUGIN_REQUIRES宏,该宏负责自动管理插件的依赖关系。
执行下例子,可以根据打印日志追踪插件被app调用的执行流程。
./examples/appbase_example --plugin net_plugin
initialize chain plugin
initialize net plugin
starting chain plugin
starting net plugin
^C
shutdown net plugin
shutdown chain plugin
exited cleanly
over!
大家可以通过一下方式跟踪关注我:
github:https://github.com/philsong
本文是EOS技术研究系列的第四篇。
第一篇.Mac下的编译:http://www.jianshu.com/p/f26ee4cf1d4a
第二篇.eosc命令行工具:http://www.jianshu.com/p/b2db966435d0
第三篇.appbase库:http://www.jianshu.com/p/b7f0bbe89610
第四篇.chainbase库与database_plugin插件:http://www.jianshu.com/p/df835b574b52
区块链技术EOS开发系列之appbase库
网友评论