https://github.com/ssbc/ssb-gossip
Schedule connections randomly with a peerlist constructed from config, multicast UDP announcements, feed announcements, and API-calls
https://github.com/ssbc/ssb-gossip
Last synced: 12 months ago
JSON representation
Schedule connections randomly with a peerlist constructed from config, multicast UDP announcements, feed announcements, and API-calls
- Host: GitHub
- URL: https://github.com/ssbc/ssb-gossip
- Owner: ssbc
- License: mit
- Created: 2019-01-05T03:48:36.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2021-11-29T23:44:54.000Z (over 4 years ago)
- Last Synced: 2025-06-08T20:59:16.041Z (about 1 year ago)
- Language: JavaScript
- Homepage:
- Size: 73.2 KB
- Stars: 10
- Watchers: 4
- Forks: 3
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ssb-gossip
ssb-server gossip plugin
⚠️ See also: [ssb-conn](https://github.com/staltz/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,
* observed a local udp broadcast from them [ssb-server/plugins/local](https://github.com/ssbc/ssb-server/blob/master/plugins/local.js)
* received their device-address message [ssb-device-address](https://github.com/ssbc/ssb-device-address)
* received a pub message about them [ssb-gossip/init](https://github.com/ssbc/ssb-gossip/blob/master/init.js#L14-L29)
* configured their address manually as a [seed](https://github.com/ssbc/ssb-gossip/blob/master/init.js#L11-L12)
* or the user called [gossip.add](#add-sync)
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](https://en.wikipedia.org/wiki/Eventual_consistency))
## peers: sync
Get the current known peers.
```bash
peers
```
```js
peers(cb)
```
## add: sync
Add a peer.
```bash
#add a multiserver address.
add {addr}
#legacy format
add --host {string} --port {number} --key {feedid}
```
```js
add(addr, cb)
add({ host:, port:, key: }, cb)
```
- `addr` (address string): A [multiserver address](https://github.com/ssbc/multiserver#address-format)
- `host` (host string): IP address or hostname.
- `port` (port number)
- `key` (feedid)
## remove: sync
Remove an address from the peer table.
```bash
remove {addr}
remove --host {string} --port {number} --key {feedid}
```
```js
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.
```bash
connect {addr}
connect --host {string} --port {number} --key {feedid}
```
```js
connect(addr, cb)
connect({ host:, port:, key: }, cb)
```
- `addr` (address string): An address string, of the following format: `hostname:port:feedid`.
- `host` (host string): IP address or hostname.
- `port` (port number)
- `key` (feedid)
## changes: source
Listen for gossip events.
```bash
changes
```
```js
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.
```bash
enable {type}
```
```js
enable(type, cb)
```
- type (string): The type of gossip to enable: local, global, or seed. Default
global.
## disable: sync
Update the config to disable a gossip type.
```bash
disable {type}
```
```js
disable(type, cb)
```
- type (string): The type of gossip to enable: local, global, or seed. Default
global.
## License
MIT