长安链源码分析启动(2)
作者:李
- 2022 年 8 月 29 日 湖南
本文字数:1145 字
阅读完需:约 4 分钟
本文已参与「开源摘星计划」,欢迎正在阅读的你加入。活动链接:https://github.com/weopenprojects/WeOpen-Star
1.ChainMakerServer 初始化方法如下
// Init ChainMakerServer.
func (server *ChainMakerServer) Init() error {
var err error
log.Debug("begin init chain maker server...")
server.readyC = make(chan struct{})
//初始化网络
if err = server.initNet(); err != nil {
return err
}
// 初始化区块链
if err = server.initBlockchains(); err != nil {
return err
}
log.Info("init chain maker server success!")
return nil
}
复制代码
从代码里可以看出,核心就两个方法,分别是初始化网络和初始化区块链。
2.初始化 rpc 服务,是把初始化好的 chainMakerServer 作为参数传入进来,核心逻辑如下:
func NewRPCServer(chainMakerServer *blockchain.ChainMakerServer) (*RPCServer, error) {
//创建一个grpc server
server, err := newGrpc(chainMakerServer)
if err != nil {
return nil, fmt.Errorf("new grpc server failed, %s", err.Error())
}
.......
//把grpc server和chainMakerServer包装成RPCServer返回rpc服务器
return &RPCServer{
grpcServer: server,
chainMakerServer: chainMakerServer,
log: logger.GetLogger(logger.MODULE_RPC),
}, nil
}
复制代码
启动 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
}
}
复制代码
启动 rpc 服务器
func (s *RPCServer) Start() error {
//注册处理器
if err = s.RegisterHandler(); err != nil {
return fmt.Errorf("register handler failed, %s", err.Error())
}
endPoint := fmt.Sprintf(":%d", localconf.ChainMakerConfig.RpcConfig.Port)
//网络监听
conn, err := net.Listen("tcp", endPoint)
if err != nil {
return fmt.Errorf("TCP listen failed, %s", err.Error())
}
//开启协程,为每个建立的连接提供服务
go func() {
err = s.grpcServer.Serve(conn)
if err != nil {
s.log.Errorf("grpc Serve failed, %s", err.Error())
}
}()
}
复制代码
我们一层层卜拨开主脉络。
划线
评论
复制
发布于: 刚刚阅读数: 5
李
关注
还未添加个人签名 2018.05.04 加入
还未添加个人简介
评论