ProtocolManager 의 분석

1848 단어
1. 데이터 구조
//eth/handler.go
type ProtocolManager struct {
    networkId uint64

    fastSync  uint32 // Flag whether fast sync is enabled (gets disabled if we already have blocks)
    acceptTxs uint32 // Flag whether we're considered synchronised (enables transaction processing)

    txpool      txPool
    blockchain  *core.BlockChain
    chainconfig *params.ChainConfig
    maxPeers    int

    downloader *downloader.Downloader
    fetcher    *fetcher.Fetcher
    peers      *peerSet

    SubProtocols []p2p.Protocol

    eventMux      *event.TypeMux
    txCh          chan core.TxPreEvent
    txSub         event.Subscription
    minedBlockSub *event.TypeMuxSubscription

    // channels for fetcher, syncer, txsyncLoop
    newPeerCh   chan *peer
    txsyncCh    chan *txsync
    quitSync    chan struct{}
    noMorePeers chan struct{}

    // wait group is used for graceful shutdowns during downloading
    // and processing
    wg sync.WaitGroup
}

ProtocolManager 구조 체 는 시작 할 때 두 부분 으로 나 눌 수 있 습 니 다.
  • SubProtocols, 이 부분 은 node. Start () = > p2p. Server. Start () 의 프로 세 스 로 갑 니 다. 등 록 된 리 셋 함 수 는 node (node / node. go) 의 p2p. Server 에서 사 용 됩 니 다. 구체 적 인 사용 입 구 는 다음 과 같 습 니 다.https://www.jianshu.com/p/f04fd9095e74제7 절, 메시지 처리 방법의 등록 은 다음 과 같다
  • .
    //eth/handler.go
    manager.SubProtocols = append(manager.SubProtocols, p2p.Protocol{
                Name:    ProtocolName,
                Version: version,
                Length:  ProtocolLengths[i],
                Run: func(p *p2p.Peer, rw p2p.MsgReadWriter) error {
                    peer := manager.newPeer(int(version), p, rw)
                    select {
                    case manager.newPeerCh 
  • 기타 부분 은 node. Start () = > Ethereum. Start () = > protocolManager. Start 의 절차, 구체 적 으로 보면https://www.jianshu.com/p/ae9920adcff6
  • 좋은 웹페이지 즐겨찾기