⛔️ DEPRECATED: libp2p-connection-manager is now included in js-libp2p
JavaScript connection manager for libp2p
> npm install libp2p-connection-manager
const ConnManager = require('libp2p-connection-manager')
A connection manager manages the peers you're connected to. The application provides one or more limits that will trigger the disconnection of peers. These limits can be any of the following:
- number of connected peers
- maximum bandwidth (sent / received or both)
- maximum event loop delay
The connection manager will disconnect peers (starting from the less important peers) until all the measures are withing the stated limits.
A connection manager first disconnects the peers with the least value. By default all peers have the same importance (1), but the application can define otherwise. Once a peer disconnects the connection manager discards the peer importance. (If necessary, the application should redefine the peer state if the peer is again connected).
const libp2p = // …
const options = {…}
const connManager = new ConnManager(libp2p, options)
Options is an optional object with the following key-value pairs:
maxPeers
: number identifying the maximum number of peers the current peer is willing to be connected to before is starts disconnecting. Defaults toInfinity
maxPeersPerProtocol
: Object with key-value pairs, where a key is the protocol tag (case-insensitive) and the value is a number, representing the maximum number of peers allowing to connect for each protocol. Defaults to{}
.minPeers
: number identifying the number of peers below which this node will not activate preemptive disconnections. Defaults to0
.maxData
: sets the maximum data — in bytes per second - (sent and received) this node is willing to endure before it starts disconnecting peers. Defaults toInfinity
.maxSentData
: sets the maximum sent data — in bytes per second - this node is willing to endure before it starts disconnecting peers. Defaults toInfinity
.maxReceivedData
: sets the maximum received data — in bytes per second - this node is willing to endure before it starts disconnecting peers. Defaults toInfinity
.maxEventLoopDelay
: sets the maximum event loop delay (measured in miliseconds) this node is willing to endure before it starts disconnecting peers. Defaults toInfinity
.pollInterval
: sets the poll interval (in miliseconds) for assessing the current state and determining if this peer needs to force a disconnect. Defaults to2000
(2 seconds).movingAverageInterval
: the interval used to calculate moving averages (in miliseconds). Defaults to60000
(1 minute).defaultPeerValue
: number between 0 and 1. Defaults to 1.
Starts the connection manager.
Stops the connection manager.
Sets the peer value for a given peer id. This is used to sort peers (in reverse order of value) to determine which to disconnect from first.
Arguments:
- peerId: B58-encoded string or
peer-id
instance. - value: a number between 0 and 1, which represents a scale of how valuable this given peer id is to the application.
Returns the peers this connection manager is connected to.
Returns an array of PeerInfo.
Emitted when a limit is exceeded. Limit names can be:
maxPeers
minPeers
maxData
maxSentData
maxReceivedData
maxEventLoopDelay
- a protocol tag string (lower-cased)
Emitted when a peer is about to be preemptively disconnected.
Emitted when a peer is disconnected (preemptively or note). If this peer reconnects, you will need to reset it's value, since the connection manager does not remember it.
Emitted when a peer connects. This is a good event to set the peer value, so you can get some control over who gets banned once a maximum number of peers is reached.
Feel free to join in. All welcome. Open an issue!
This repository falls under the IPFS Code of Conduct.