图说比特币 Part 3:如何加载配置文件?
图说比特币 Part 3:如何加载配置文件?
======
备注:为了简洁起见,文章只涉及了部分关键代码和结构。推荐下载源码,查看详细实现。
1.1引言
BTCD只要运行命令btcd --configfile ./btcd.conf
就完成了所有配置。是如何做到的呢?
今天的目标就是就将地址(127.0.0.1:9333)放入配置文件当中。
1.2代码地址
1.3 加载配置文件
加载配置文件使用了 go-flags,用于解析命令行和文件,是内置库flag的加强版。
新建默认配置
cfg := config{LogDir: defaultLogDir,MaxPeers: defaultMaxPeers,}
加载命令行
preParser.Parse()
解析配置文件
flags.NewIniParser(parser).ParseFile(preCfg.ConfigFile)
设置其它配置项
cfg.dial = net.DialTimeout
cfg.lookup = net.LookupIP
1.4 BTCD如何载入配置的地址?
newServer
新建了server
,并且连接连接所有配置的地址。
1.1 新建server
:s := server{}
1.2 获取配置的地址:permanentPeers := cfg.ConnectPeers
1.3 连接所有地址:
go s.connManager.Connect(&connmgr.ConnReq{
Addr: netAddr,
Permanent: true,
})
Connect
:为连接指定id并且发送连接请求。
2.1 为连接指定id:atomic.StoreUint64(&c.id, atomic.AddUint64(&cm.connReqCount, 1))
2.2 发送连接请求:conn, err := cm.cfg.Dial(c.Addr)
outboundPeerConnected
:建立网络连接并进行”initial handshake”。(“initial handshake”就是第一章的Version和Verack信息)
3.1 建立网络连接:connManager
建立连接后会调用outboundPeerConnected
。该函数初始化一个新的serverPeer
(serverPeer
是peer
的子类,多了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 协议》,转载必须注明作者和本文链接
推荐文章: