|
|
- /*
- Package PEX (Peer exchange) handles all the logic necessary for nodes to share
- information about their peers to other nodes. Specifically, this is the exchange
- of addresses that a peer can use to discover more peers within the network.
-
- The PEX reactor is a continuous service which periodically requests addresses
- and serves addresses to other peers. There are two versions of this service
- aligning with the two p2p frameworks that Tendermint currently supports.
-
- V1 is coupled with the Switch (which handles peer connections and routing of
- messages) and, alongside exchanging peer information in the form of port/IP
- pairs, also has the responsibility of dialing peers and ensuring that a
- node has a sufficient amount of peers connected.
-
- V2 is embedded with the new p2p stack and uses the peer manager to advertise
- peers as well as add new peers to the peer store. The V2 reactor passes a
- different set of proto messages which include a list of
- [urls](https://golang.org/pkg/net/url/#URL).These can be used to save a set of
- endpoints that each peer uses. The V2 reactor has backwards compatibility with
- V1. It can also handle V1 messages.
-
- The V2 reactor is able to tweak the intensity of it's search by decreasing or
- increasing the interval between each request. It tracks connected peers via a
- linked list, sending a request to the node at the front of the list and adding
- it to the back of the list once a response is received. Using this method, a
- node is able to spread out the load of requesting peers across all the peers it
- is currently connected with.
-
- With each inbound set of addresses, the reactor monitors the amount of new
- addresses to already seen addresses and uses the information to dynamically
- build a picture of the size of the network in order to ascertain how often the
- node needs to search for new peers.
- */
- package pex
|