本文QQ空间链接:
http://user.qzone.qq.com/29185807/blog/1519899372
本文csdn博客链接:http://blog.csdn.net/screscent/article/details/79416318
上一篇分析了p2p模块的初始化与start。
继续上一篇分析。
先回顾下p2p的初始化
github.com/ethereum/go-ethereum/eth/backend.go中
函数
func New(config *Config) (*Ethereum, error) {
下面是start
那现在进入到p2p模块中
github.com/ethereum/go-ethereum/p2p/server.go中
在p2p模块中,大部分的数据是通过chan来进行传输的。以上有7个chan
上面是关键地方,两个入口。
下面分别介绍
Listen部分
继续跟踪
这里面有slots,是用来做数量限制的。用了一个带缓冲区的chan,先讲token放进去,然后先取出token,接收一个链接,当链接ok了后,将token放回去。
很简单的chan的应用
那么逻辑还是很清晰的,我们继续跟踪
这里面的东西就比较多了。一个一个来