单个 Connection

// This structure is used to do book keeping for the connection and keeps other DATA related to peer
// golang restricts 64 bit uint64/int atomic on a 64 bit boundary
// therefore all atomics are on the top
type Connection struct {
    Height       int64 // last height sent by peer  ( first member alignments issues)
    StableHeight int64 // last stable height
    TopoHeight   int64 // topo height, current topo height, this is the only thing we require for syncing

    LastObjectRequestTime int64  // when was the last item placed in object list
    BytesIn               uint64 // total bytes in
    BytesOut              uint64 // total bytes out
    Latency               int64  // time.Duration            // latency to this node when sending timed sync

    Incoming          bool              // is connection incoming or outgoing
    Addr              *net.TCPAddr      // endpoint on the other end
    Port              uint32            // port advertised by other end as its server,if it's 0 server cannot accept connections
    Peer_ID           uint64            // Remote peer id
    Lowcpuram         bool              // whether the peer has low cpu ram
    SyncNode          bool              // whether the peer has been added to command line as sync node
    Top_Version       uint64            // current hard fork version supported by peer
    TXpool_cache      map[uint64]uint32 // used for ultra blocks in miner mode,cache where we keep TX which have been broadcasted to this peer
    TXpool_cache_lock sync.RWMutex
    ProtocolVersion   string
    Tag               string // tag for the other end
    DaemonVersion     string
    //Exit                  chan bool   // Exit marker that connection needs to be killed
    ExitCounter           int32
    State                 uint32       // state of the connection
    Top_ID                crypto.Hash  // top block id of the connection
    Cumulative_Difficulty string       // cumulative difficulty of top block of peer, this is NOT required
    CDIFF                 atomic.Value //*big.Int    // NOTE: this field is used internally and is the parsed from Cumulative_Difficulty

    logger            *log.Entry // connection specific logger
    logid             string     // formatted version of connection
    Requested_Objects [][32]byte // currently unused as we sync up with a single peer at a time
    Conn              net.Conn   // actual object to talk
    //    Command_queue     *list.List               // New protocol is partly syncronous
    Objects      chan Queued_Command      // contains all objects that are requested
    SpeedIn      *ratecounter.RateCounter // average speed in last 60 seconds
    SpeedOut     *ratecounter.RateCounter // average speed in last 60 secs
    request_time atomic.Value             //time.Time                // used to track latency
    writelock    sync.Mutex               // used to Serialize writes

    sync.Mutex // used only by connection go routine

}

连接池

var connection_map sync.Map                      // map[string]*Connection{}

功能模块

  • Send_* 请求出去

  • Handle_* 响应进来

  • Broadcast_* 广播

results matching ""

    No results matching ""