ssbc / ssb-gossip

Schedule connections randomly with a peerlist constructed from config, multicast UDP announcements, feed announcements, and API-calls
MIT License
10 stars 3 forks source link

ssb-gossip

ssb-server gossip plugin

⚠️ See also: ssb-conn

to have a peer to peer network, a ssb instance needs to have some other peers to connect with. This module keeps track of those peers. There are a number of ways a you can know about a peer,

Notice these are mostly managed by other plugins.

The gossip plugin then decides when to connect to those peers, which it does mostly randomly. (connecting randomly means you will eventually connect to everyone, thus a useful database property: eventual consistency)

peers: sync

Get the current known peers.

peers
peers(cb)

add: sync

Add a peer.

#add a multiserver address.
add {addr}
#legacy format
add --host {string} --port {number} --key {feedid}
add(addr, cb)
add({ host:, port:, key: }, cb)

remove: sync

Remove an address from the peer table.

remove {addr}
remove --host {string} --port {number} --key {feedid}
remove(addr)
remove({ host:, port:, key: })

ping: duplex

used internally by the gossip plugin to measure latency and clock skew

connect: async

Add an address to the peer table, and connect immediately.

connect {addr}
connect --host {string} --port {number} --key {feedid}
connect(addr, cb)
connect({ host:, port:, key: }, cb)

changes: source

Listen for gossip events.

changes
changes()

Events come in the following forms:

{ type: 'discover', peer:, source: }
{ type: 'connect', peer: }
{ type: 'connect-failure', peer: }
{ type: 'disconnect', peer: }

reconnect: sync

Tell ssb-server to reinitiate gossip connections now.

enable: sync

Update the config to enable a gossip type.

enable {type}
enable(type, cb)

disable: sync

Update the config to disable a gossip type.

disable {type}
disable(type, cb)

License

MIT