前言
研究公链中msg互相触发关系,学习一下以太坊中消息广播的逻辑顺序。
带宽要求和消息转发之间有没有相对关系。
消息监听机制 handleMsg: server,client,ProtocolManager
消息广播机制 broadcast: transaction,block,blockHash
寻找转发点
找msg的监听循环,代码中类似handleMsg之类的函数
ProtocolManager.handeMsg 中的转发逻辑
在ProtocolManager.handleMsg中把所有消息的触发关系梳理了一遍。
内容如下
举例 GetBlockHeadersMsg
在共识过程中,如果节点收到了区块头的消息。
会触发消息监听中的GetBlockHeadersMsg事件。
代码如下
handler.go line386
case msg.Code == GetBlockHeadersMsg:
...
if err := msg.Decode(&query); err != nil {
return errResp(ErrDecode, "%v: %v", msg, err)
}
...
return p.SendBlockHeaders(headers)