背景
因为最近我们在自研底层联盟链,所以调研了现在市面上的主流的公链,联盟链。
xuperchain基于插件机制,实现多个核心模块可替换,包括存储,共识,网络等。下面我们就来看看这个插件机制是如何实现的
PluginMgr 插件管理器
// PluginMgr defines the data struct of plugin manager,只管理配置文件,不管理实例
type PluginMgr struct {
pluginConf map[string]map[string]confNode //配置文件
xlog log.Logger
rootFolder string
sync.Mutex
}
// 插件的配置属性
type confNode struct {
SubType string `json:"subtype"`
Path string `json:"path"`
Version string `json:"version"`
OnDemand bool `json:"ondemand"`
}
// PluginMeta is the meta info for plugins
type PluginMeta struct {
PluginID string `json:"pluginid"`
Type string `json:"type"`
SubType string `json:"subtype"`
Version string `json:"version"`
}
- xchainpm 为xuperchain使用的插件管理器。 两个类可以合成一个
// XchainPM is the plugin manager wrapper for XuperChain
type XchainPM struct {
PluginMgr *PluginMgr
xlog log.Logger
confPath string // 插件的配置文件
autoloadPath string // 动态加载路径,没有看出这个auto-load有什么用
}
// const for default valuess
const (
DefaultConfPath = "./conf/plugins.conf" // default config path
DefaultAutoloadPath = "./plugins/autoload/" // default plugin auto-load path
)
- 流程图