mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-05-02 05:52:14 +00:00
We have a peerstore that keeps all data for all observed peers in memory with no eviction. This is fine when you don't discover many peers but when using the DHT you encounter a significant number of peers so our peer storage grows and grows over time. We have a persistent peer store, but it just periodically writes peers into the datastore to be read at startup, still keeping them in memory. It also means a restart doesn't give you any temporary reprieve from the memory leak as the previously observed peer data is read into memory at startup. This change refactors the peerstore to use a datastore by default, reading and writing peer info as it arrives. It can be configured with a MemoryDatastore if desired. It was necessary to change the peerstore and *book interfaces to be asynchronous since the datastore api is asynchronous. BREAKING CHANGE: `libp2p.handle`, `libp2p.registrar.register` and the peerstore methods have become async
77 lines
1.8 KiB
JavaScript
77 lines
1.8 KiB
JavaScript
// eslint-disable-next-line
|
|
'use strict'
|
|
|
|
const Libp2p = require('libp2p')
|
|
const Websockets = require('libp2p-websockets')
|
|
const WebSocketStar = require('libp2p-websocket-star')
|
|
const WebRTCStar = require('libp2p-webrtc-star')
|
|
const MPLEX = require('libp2p-mplex')
|
|
const { NOISE } = require('@chainsafe/libp2p-noise')
|
|
const KadDHT = require('libp2p-kad-dht')
|
|
const DelegatedPeerRouter = require('libp2p-delegated-peer-routing')
|
|
const DelegatedContentRouter = require('libp2p-delegated-content-routing')
|
|
|
|
export default function Libp2pBundle ({peerInfo, peerBook}) {
|
|
const wrtcstar = new WebRTCStar({id: peerInfo.id})
|
|
const wsstar = new WebSocketStar({id: peerInfo.id})
|
|
const delegatedApiOptions = {
|
|
host: '0.0.0.0',
|
|
protocol: 'http',
|
|
port: '8080'
|
|
}
|
|
|
|
return new Libp2p({
|
|
peerInfo,
|
|
peerBook,
|
|
// Lets limit the connection managers peers and have it check peer health less frequently
|
|
connectionManager: {
|
|
maxPeers: 10,
|
|
pollInterval: 5000
|
|
},
|
|
modules: {
|
|
contentRouting: [
|
|
new DelegatedContentRouter(peerInfo.id, delegatedApiOptions)
|
|
],
|
|
peerRouting: [
|
|
new DelegatedPeerRouter(delegatedApiOptions)
|
|
],
|
|
peerDiscovery: [
|
|
wrtcstar.discovery,
|
|
wsstar.discovery
|
|
],
|
|
transport: [
|
|
wrtcstar,
|
|
wsstar,
|
|
Websockets
|
|
],
|
|
streamMuxer: [
|
|
MPLEX
|
|
],
|
|
connEncryption: [
|
|
NOISE
|
|
],
|
|
dht: KadDHT
|
|
},
|
|
config: {
|
|
peerDiscovery: {
|
|
autoDial: false,
|
|
webrtcStar: {
|
|
enabled: false
|
|
},
|
|
websocketStar: {
|
|
enabled: false
|
|
}
|
|
},
|
|
dht: {
|
|
enabled: false
|
|
},
|
|
relay: {
|
|
enabled: true,
|
|
hop: {
|
|
enabled: false
|
|
}
|
|
}
|
|
}
|
|
})
|
|
}
|