写点什么

长安链源码分析启动(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 serverserver, 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}
复制代码
  1. 启动 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}}
复制代码
  1. 启动 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()) } }()}
复制代码


我们一层层卜拨开主脉络。

用户头像

关注

还未添加个人签名 2018.05.04 加入

还未添加个人简介

评论

发布
暂无评论
长安链源码分析启动(2)_长安链_李_InfoQ写作社区