我是靠谱客的博主 眼睛大期待,最近开发中收集的这篇文章主要介绍以太坊源码分析(31)eth-downloader-peer源码分析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

peer模块包含了downloader使用的peer节点,封装了吞吐量,是否空闲,并记录了之前失败的信息。


## peer
    
    // peerConnection represents an active peer from which hashes and blocks are retrieved.
    type peerConnection struct {
        id string // Unique identifier of the peer
    
        headerIdle int32 // Current header activity state of the peer (idle = 0, active = 1) 当前的header获取的工作状态。
        blockIdle int32 // Current block activity state of the peer (idle = 0, active = 1)    当前的区块获取的工作状态
        receiptIdle int32 // Current receipt activity state of the peer (idle = 0, active = 1) 当前的收据获取的工作状态
        stateIdle int32 // Current node data activity state of the peer (idle = 0, active = 1) 当前节点状态的工作状态
    
        headerThroughput float64 // Number of headers measured to be retrievable per second    //记录每秒能够接收多少个区块头的度量值
        blockThroughput float64 // Number of blocks (bodies) measured to be retrievable per second //记录每秒能够接收多少个区块的度量值
        receiptThroughput float64 // Number of receipts measured to be retrievable per second 记录每秒能够接收多少个收据的度量值
        stateThroughput float64 // Number of node data pieces measured to be retrievable per second 记录每秒能够接收多少个账户状态的度量值
    
        rtt time.Duration // Request round trip time to track responsiveness (QoS) 请求回应时间
    
        headerStarted time.Time // Time instance when the last header fetch was started    记录最后一个header fetch的请求时间
        blockStarted time.Time // Time instance when the last block (body) fetch was started
        receiptStarted time.Time // Time instance when the last receipt fetch was started
        stateStarted time.Time // Time instance when the last node data fetch was started
        
        lacking map[common.Hash]struct{} // Set of hashes not to request (didn't have previously) 记录的Hash值不会去请求,一般是因为之前的请求失败
    
        peer Peer           // eth的peer
    
        version int // Eth protocol version number to switch strategies
        log log.Logger // Contextual logger to add extra infos to peer logs
        lock sync.RWMutex
    }



FetchXXX
FetchHeaders FetchBodies等函数 主要调用了eth.peer的功能来进行发送数据请求。

    // FetchHeaders sends a header retrieval request to the remote peer.
    func (p *peerConnection) FetchHeaders(from uint64, count int) error {
        // Sanity check the protocol version
        if p.version < 62 {
            panic(fmt.Sprintf("header fetch [eth/62+] requested on eth/%d", p.version))
        }
        // Short circuit if the peer is already fetching
        if !atomic.CompareAndSwapInt32(&p.headerIdle, 0, 1) {
            return errAlreadyFetching
        }
        p.headerStarted = time.Now()
    
        // Issue the header retrieval request (absolut upwards without gaps)
        go p

最后

以上就是眼睛大期待为你收集整理的以太坊源码分析(31)eth-downloader-peer源码分析的全部内容,希望文章能够帮你解决以太坊源码分析(31)eth-downloader-peer源码分析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部