AToken - 以太坊,区块链,数字货币钱包,波卡钱包,Defi钱包,eth钱包,比特币钱包

hyperledger fabric 结构分析(三)

时间:2021-09-09 15:59作者:未知

本文解决的问题是:本Peer节点怎么样接收其他节点的数据,接到数据怎么样处置?
之前两节的剖析是命令出处是CLI client,怎么样连接到Devops服务器、怎么样发送给Consensus模块、怎么样发送给ChainCodeSupportClient等。
下面剖析本文要讨论的问题
1)在进行互联网初始化的过程中实行以下内容,在创建节点Engine过程中该节点作为推广客户端的身份连接到其他Peer
[cpp] 代码peerServer, err = peer.NewPeerWithEngine
[cpp] 代码

func chatWithPeer error { peerLogger.Debugf conn, err := NewPeerClientConnectionWithAddress if err != nil { peerLogger.Errorf return err } serverClient := pb.NewPeerClient ctx := context.Background stream, err := serverClient.Chat if err != nil { peerLogger.Errorf return err } peerLogger.Debugf err = p.handleChat stream.CloseSend if err != nil { peerLogger.Errorf return err } return nil }
2.在handleChat实行过程中,打造消息循环,而这里的handler.HandleMessage。这个handler之前介绍过,是Engine的消息响应句柄,该消息响应处置源于Consensus模块
[cpp] 代码func handleChat error { deadline, ok := ctx.Deadline peerLogger.Debugf handler, err := p.handlerFactory if err != nil { return fmt.Errorf } defer handler.STOP for { in, err := stream.Recv if err == io.EOF { peerLogger.Debug return nil } if err != nil { e := fmt.Errorf peerLogger.Error) return e } err = handler.HandleMessage if err != nil { peerLogger.Errorf //return err } } }
3.HandleMessage函数consenterChan 这个channel比较要紧,该写入操作会触发engine.consensusFan的消息循环
[cpp] 代码func HandleMessage error { if msg.Type == pb.Message_CONS以太坊域名服务US { senderPE, _ := handler.To select { case handler.consenterChan <- &util.Message{ Msg:msg, Sender: senderPE.ID, }: return nil default: err := fmt.Errorf logger.Errorf return err } } if logger.IsEnabledFor { logger.Debugf } return handler.MessageHandler.HandleMessage }
4.看到RecvMsg这个函数是否有点眼熟,这个操作和 hyperledger fabric 结构剖析 最后一个步骤是一样的。
[cpp] 代码func GetEngine { var err error engineOnce.Do { engine = new engine.helper = NewHelper engine.consenter = controller.NewConsenter engine.helper.setConsenter engine.peerEndpoint, err = coord.GetPeerEndpoint engine.consensusFan = util.NewMessageFan go func { logger.Debug // The channel never closes, so this should never break for msg := range engine.consensusFan.GetOutChannel { engine.consenter.RecvMsg } } }) return engine, err }
5.再往下的步骤与 hyperledger fabric 结构剖析中的一致。

版权保护: 本文由 AToken 原创,转载请保留链接: http://www.dkxdn.com/jiaocheng/20210909/8.html

上一篇:Rollup 的用户体验

下一篇:没有了

相关文章
图文推荐