Tendermint阅读IV
文章目录
我们之前看了Tendermint如何和别人连接,如何接受别人的连接,可是,Tendermint得怎么找到别人啊! 不能手动一个一个的输入连接地址啊! 这个就是pexreactor的功能了!
我们首先看下PEXReactor怎么定义的
|
|
很简单,继承了基础的reactor,然后有一些地址表,我们具体的去看一看。
|
|
还好,就是把传递的变量赋值进去,然后创建了一个reactor,就像我们之前看到的service一样。 是怎么启动起来的呢?
|
|
首先是启动地址簿,我们答题说几句,就是会从我们的配置文件中读取地址信息,然后保存下来。具体的我们以后再分析。 接下来是检查这些种子节点是否有错误。主要检查的什么呢? 检查的就是种子节点的内容格式是否正确,是否能够联通,然后返回可用的种子 最后根据配置,看自己是否是个种子节点,如果是的话,就去抓取其他的节点,如果不是,就是保证节点连接就好了。 我们来看看作为种子节点是怎么工作的
|
|
很明显,先抓取一次其他的节点,然后定时轮询取获取其他的节点。
|
|
整体流程就是取获取新的节点去连接。怎么获取的新的节点呢?就是向已连接过的节点去请求新的节点,类似于gossip协议,一层一层的扩散出去找新的节点。 我们再看下普通节点时候如何工作的
|
|
和作为种子节点差不多,一定时间情况下就去维持连接
|
|
整体过程就是挑选出需要连接的peer节点,然后进行连接,如果本peer存的地址太少的话,就请求更多的节点来。 现在我们能够发现,节点可以连接到别人上面,别的节点应该能够连接到本节点,怎么处理呢?
|
|
就是对节点收到的pex信息进行处理,包括像别人请求时别的peer相应的信息以及本peer响应别的节点的信息。
如果我们整体来看PEXReactor的话,就是实现了连接的管理和维护,可以实现向别的节点请求连接,更新本地的连接,然后也可以响应别的节点的请求,本地做出回应。