Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hackergrrl/pubsub-swarm
:honeybee: Form a p2p swarm of nodes around a topic and exchange messages.
https://github.com/hackergrrl/pubsub-swarm
Last synced: 24 days ago
JSON representation
:honeybee: Form a p2p swarm of nodes around a topic and exchange messages.
- Host: GitHub
- URL: https://github.com/hackergrrl/pubsub-swarm
- Owner: hackergrrl
- Created: 2016-03-05T23:45:38.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2020-05-27T16:00:20.000Z (over 4 years ago)
- Last Synced: 2024-10-22T02:06:37.066Z (29 days ago)
- Language: JavaScript
- Homepage:
- Size: 7.81 KB
- Stars: 34
- Watchers: 9
- Forks: 7
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# pubsub-swarm
> Form a p2p swarm of nodes around a topic and exchange messages.
## Background
This module provides a simple pubsub interface on top of an unstructured swarm
of peers interested in a common topic string. Distributed pubsub! It's meant to
be used as a primitive to build server-less applications without needing to have
a deeper understanding of distributed systems.This module doesn't make guarantees about latencies, nor does it guarantee
delivery. Gossip isn't as fast as flooding, but it's a very robust means of
propagating data over an unstructured network. If the network is stable message
should reach every node, but partitions can occur in the network and bridging
peers can drop out at any time.Messages are cryptographically signed by their creator and given a unique
sequence number. This means that a. each incoming message can be verified that
it came from its claimed author, and that b. peers will not report duplicate
messages (e.g. if two different peers deliver them).## Example
```js
var pubsub = require('pubsub-swarm')var swarm = pubsub('the-topic')
swarm.on('message', function (msg) {
console.log('message', msg)setTimeout(function() { process.exit(0) }, 1000)
})swarm.on('connected', function () {
swarm.publish({ data: 'hello warld from ' + this.id + '!'})
})
```Run two copies of this:
```
$ node example.js &
$ node example.js &
```Running this in two terminals shows the message exchange:
```
found + connected to peer
message { data: 'hello warld from
WpiDF+5f+HRTrm2JOmNHTPyGlYGpAN3QNNwwsu3RtbY=.ed25519!' }
found + connected to peer
message { data: 'hello warld from
JxafbAD7qjHCpQY+G/2i1B7vMmBlNTC7HEh9GfP+5yY=.ed25519!' }
```## API
```js
var pubsub = require('pubsub-swarm')
```### var swarm = pubsub(topic)
Returns a new pubsub swarm interested in the topic `topic` (string). It will
begin searching for other interested peers using the BitTorrent DHT and
multicast DNS.### swarm.on('message', function (msg) {})
Emits when a new message has been received by a peer.
### swarm.publish(msg)
Publish a message to the rest of the swarm. It will gradually propogate through
the swarm using [periodic gossip](https://github.com/noffle/secure-gossip).## Install
With [npm](https://npmjs.org/) installed, run
```
$ npm install pubsub-swarm
```## License
ISC