图说比特币 Part 3:如何加载配置文件?

图说比特币 Part 3:如何加载配置文件?

======

备注:为了简洁起见,文章只涉及了部分关键代码和结构。推荐下载源码,查看详细实现。

1.1引言

BTCD只要运行命令btcd --configfile ./btcd.conf 就完成了所有配置。是如何做到的呢?

今天的目标就是就将地址(127.0.0.1:9333)放入配置文件当中。

1.2代码地址

图说比特币 Part 3:如何加载配置文件?

1.3 加载配置文件


加载配置文件使用了 go-flags,用于解析命令行和文件,是内置库flag的加强版。

  1. 新建默认配置cfg := config{LogDir: defaultLogDir,MaxPeers: defaultMaxPeers,}

  2. 加载命令行preParser.Parse()

  3. 解析配置文件flags.NewIniParser(parser).ParseFile(preCfg.ConfigFile)

  4. 设置其它配置项cfg.dial = net.DialTimeout cfg.lookup = net.LookupIP

1.4 BTCD如何载入配置的地址?


  1. newServer 新建了server,并且连接连接所有配置的地址。

1.1 新建servers := server{}

1.2 获取配置的地址:permanentPeers := cfg.ConnectPeers

1.3 连接所有地址:


go s.connManager.Connect(&connmgr.ConnReq{

Addr: netAddr,

Permanent: true,

})
  1. Connect :为连接指定id并且发送连接请求。

2.1 为连接指定id:atomic.StoreUint64(&c.id, atomic.AddUint64(&cm.connReqCount, 1))

2.2 发送连接请求:conn, err := cm.cfg.Dial(c.Addr)

  1. outboundPeerConnected:建立网络连接并进行”initial handshake”。(“initial handshake”就是第一章的Version和Verack信息)

3.1 建立网络连接:connManager建立连接后会调用outboundPeerConnected。该函数初始化一个新的serverPeer(serverPeerpeer的子类,多了server的状态信息)。

3.2 “initial handshake”:sp.AssociateConnection(conn)

4到10就是处理”initial handshake”的过程,11:startSync是同步区块信息,目前暂时为空以后会实现。

1.5测试:


$ go run ./ --configfile ./configke.conf

2020-10-26 15:38:22.842 [TRC] SRVR: Starting server

2020-10-26 15:38:22.842 [TRC] SYNC: Starting sync manager

2020-10-26 15:38:22.842 [TRC] CMGR: Connection manager started

...

1.6总结

本章先是使用 go-flags解析命令行和配置文件,然后将实现可btcd从启动到建立网络连接的过程。

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!