eos源码赏析(三):eosd初始化

上篇文章以文件分类简单的介绍了eos代码的架构,由于eosiod在整个工程中是较为重要的,接下来的例子中我们将以eosiod为主线进行相关内容的分析和探讨,今天我们主要看一下eosiod的初始化相关内容。

在所有的初始化之前,eosiod首先会进行版本的设置,通过下面一行代码即可实现:

app().set_version(eosio::eosiod::config::version);
在版本设置完成之后开始进行eosiod的初始化,如下:
    if(!app().initialize(argc, argv))

             return -1;

通过逐步跳转,我们来到appbase中的:

bool application::initialize_impl(int argc, char** argv, vector autostart_plugins)
在initialize_impl开始会首先执行set_program_options(),即构建选项器。

在这里我们要简单的介绍下program options,program options是一系列pair组成的选项列表,它允许程序通过命令行或配置文件来读取这些参数选项,eosiod的很多操作就是通过命令行来配置的,具体的命令行可以使用-help命令进行查看。

构建选项器的过程如下:

eos源码赏析(三):eosd初始化_第1张图片

在set_program_options中会有以下操作:

eos源码赏析(三):eosd初始化_第2张图片

具体选项器如何构造,在截图的文字中做了简单描述,eosiod初始化的过程其实就是包含了若干个插件的初始化的过程,因此要将各个插件的选项器构建完成:

eos源码赏析(三):eosd初始化_第3张图片

当识别到用户输入的命令行参数之后,会进行相应的操作,下面简单的浏览下这些参数的具体意义:

eos源码赏析(三):eosd初始化_第4张图片

eos源码赏析(三):eosd初始化_第5张图片

eos源码赏析(三):eosd初始化_第6张图片

各个插件会根据用户的指令参数去完成初始化操作,以上这些选项器设置完成之后,会继续进行所有插件的初始化操作:

eos源码赏析(三):eosd初始化_第7张图片

appbase会遍历所有的插件,然后去分别初始化这些插件。

在eosiod中初始化了三个插件:chain_plugin,http_plugin,net_plugin。

本文简单的介绍了eosiod的初始化内容,主要是eosiod是如何一步步的初始化这些插件的,那么这些插件是做什么用的?他们分别实现了什么功能?是如何实现的?这一个个疑问我们会在后面的文章中进行展示。

本次我们随着eos代码的更新,调整了一些分析策略,当然以后的源码分析也不会一成不变。先eos命令行工具入手,查看cleos网络通信的实现,并具体到boost::asio如何实现一个httpserver,最后基于boost::asioqt界面库,做一个小工具用来测试http post相关内容,如前文所说下一篇准备针对cleos的一些命令参数进行相关分析当然本文全以个人理解进行编写,如理解有误或者有哪些意见,还请各位不吝赐教.

长按以下二维码,关注本公众号,一起学习eos开发.

eos源码赏析(三):eosd初始化_第8张图片

有任何疑问或者指教请添加本人个人公众号,当然有对eos开发感兴趣的也可以添加,备注eos开发,拉你进群.

eos源码赏析(三):eosd初始化_第9张图片

Report

你可能感兴趣的:(C++,eos源码解析,eos源码赏析)