长安链源码分析启动(7)
作者:李
- 2022 年 8 月 30 日 湖南
本文字数:1381 字
阅读完需:约 5 分钟
本文已参与「开源摘星计划」,欢迎正在阅读的你加入。活动链接:https://github.com/weopenprojects/WeOpen-Star
接着继续看启动方法
// Start ChainMakerServer.
func (server *ChainMakerServer) Start() error {
// 1) 启动网络
if err := server.net.Start(); err != nil {
log.Errorf("[Net] start failed, %s", err.Error())
return err
}
log.Infof("[Net] start success!")
//初始化加密引擎
engine.InitCryptoEngine(localconf.ChainMakerConfig.CryptoEngine, false)
// 2) 启动每一个链
server.blockchains.Range(func(_, value interface{}) bool {
chain, _ := value.(*Blockchain)
go startBlockchain(chain)
return true
})
// 3) ready
close(server.readyC)
return nil
}
复制代码
网络启动,我们看看 liquidNet 的,这个是长安链自研的网络组件服务
整个脉络比较清晰,具体细节还要深入研究。
后面完整,我们重点测试下网络这块的代码,从而了解细节。这篇先了解一下整体过程
func (l *LiquidNet) Start() error {
l.lock.Lock()
defer l.lock.Unlock()
var err error
if l.startUp {
return ErrorNetRunning
}
// confirm config
l.confirmConfig()
// 加载私钥
l.hostCfg.PrivateKey, err = asym.PrivateKeyFromPEM(l.cryptoCfg.KeyBytes, nil)
if err != nil {
return err
}
// 确认网络类型
var netType lHost.NetworkType
firstListenAddr := l.hostCfg.ListenAddresses[0]
netType = lHost.ConfirmNetworkTypeByAddr(firstListenAddr)
if netType == lHost.UnknownNetwork {
return ErrorWrongAddressOrUnsupported
}
log.Infof("[LiquidNet] network type: %s", netType)
// 设置链的trust roots
err = l.setUpChainTrustRoots()
if err != nil {
return err
}
//设置TlsConfig
err = l.setUpTlsConfig(netType)
if err != nil {
return err
}
// 创建一个新的Host
newHost, err := l.hostCfg.NewHost(netType, l.context, log)
if err != nil {
return err
}
l.host = newHost
// bind notifiee
l.bindNotifiee()
//开启适配pkt
if l.extensionsCfg.EnablePkt {
log.Infof("[LiquidNet] Pkt enabled.")
l.pktAdapter = newPktAdapter(l.host, log)
l.pktAdapter.run()
err = l.host.RegisterMsgPayloadHandler(pktProtocol, l.pktAdapter.msgPayloadFunc)
if err != nil {
return err
}
}
//开启优先级控制
if l.extensionsCfg.EnablePriorityCtrl {
log.Infof("[LiquidNet] priority control enabled.")
l.priorityController = priorityblocker.NewBlocker(nil)
l.priorityController.Run()
}
// 启动host
err = newHost.Start()
if err != nil {
log.Errorf("[LiquidNet] host start failed, %s", err.Error())
return err
}
// 启动自动发现服务
l.discoveryService, err = protocoldiscovery.NewProtocolBasedDiscovery(
l.host,
protocoldiscovery.WithLogger(log),
protocoldiscovery.WithMaxQuerySize(3),
)
if err != nil {
log.Errorf("[LiquidNet] set up discovery service failed, %s", err.Error())
return err
}
log.Info("[LiquidNet] discovery service set up.")
l.startUp = true
return err
}
复制代码
划线
评论
复制
发布于: 刚刚阅读数: 3
李
关注
还未添加个人签名 2018.05.04 加入
还未添加个人简介
评论