上篇文章以文件分类简单的介绍了eos代码的架构,由于eosiod在整个工程中是较为重要的,接下来的例子中我们将以eosiod为主线进行相关内容的分析和探讨,今天我们主要看一下eosiod的初始化相关内容。
在所有的初始化之前,eosiod首先会进行版本的设置,通过下面一行代码即可实现:
app().set_version(eosio::eosiod::config::version);
在版本设置完成之后开始进行eosiod的初始化,如下:
if(!app().initialize<chain_plugin, http_plugin, net_plugin>(argc, argv)) return -1;
通过逐步跳转,我们来到appbase中的:
bool application::initialize_impl(int argc, char** argv, vector<abstract_plugin*> autostart_plugins)
在initialize_impl开始会首先执行set_program_options(),即构建选项器。
在这里我们要简单的介绍下program options,program options是一系列pair<name,value>组成的选项列表,它允许程序通过命令行或配置文件来读取这些参数选项,eosiod的很多操作就是通过命令行来配置的,具体的命令行可以使用-help命令进行查看。
构建选项器的过程如下:
在set_program_options中会有以下操作:
具体选项器如何构造,在截图的文字中做了简单描述,eosiod初始化的过程其实就是包含了若干个插件的初始化的过程,因此要将各个插件的选项器构建完成:
当识别到用户输入的命令行参数之后,会进行相应的操作,下面简单的浏览下这些参数的具体意义:
各个插件会根据用户的指令参数去完成初始化操作,以上这些选项器设置完成之后,会继续进行所有插件的初始化操作:
appbase会遍历所有的插件,然后去分别初始化这些插件。
在eosiod中初始化了三个插件:chain_plugin,http_plugin,net_plugin。
本文简单的介绍了eosiod的初始化内容,主要是eosiod是如何一步步的初始化这些插件的,那么这些插件是做什么用的?他们分别实现了什么功能?是如何实现的?这一个个疑问我们会在后面的文章中进行展示。