pulsarcast

A JS implementation of Pulsarcast - https://github.com/JGAntunes/pulsarcast

https://github.com/jgantunes/js-pulsarcast

Science Score: 44.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Committers with academic emails
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (9.1%) to scientific vocabulary

Keywords from Contributors

mesh interactive
Last synced: 7 months ago · JSON representation ·

Repository

A JS implementation of Pulsarcast - https://github.com/JGAntunes/pulsarcast

Basic Info
  • Host: GitHub
  • Owner: JGAntunes
  • License: mit
  • Language: JavaScript
  • Default Branch: master
  • Homepage:
  • Size: 1.4 MB
Statistics
  • Stars: 8
  • Watchers: 2
  • Forks: 0
  • Open Issues: 17
  • Releases: 0
Created almost 8 years ago · Last pushed over 3 years ago
Metadata Files
Readme License Citation

README.md

pipeline status coverage report

JS Pulsarcast

A JS implementation of Pulsarcast

Keep in mind that this module is quite alpha :hammer:

Install

npm install pulsarcast

Usage

```javascript const Pulsarcast = require('pulsarcast')

// node is Libp2p Node const pulsarcastNode = new Pulsarcast(node)

const pulsarcastNode.start((err) => { if (err) console.log('No!!!', err)

pulsarcastNode.createTopic('fuuuuun', (err, cid, topicNode) => { if (err) console.log('No!!!', err)

console.log('Our new topic \o/', topicNode)

pulsarcastNode.on(cid.toBaseEncodedString(), (eventNode) => {
  console.log('event', eventNode)
})

pulsarcastNode.publish(cid.toBaseEncodedString(), new Buffer('yolo!'), (err, eventCID) => {
  if (err) console.log('No!!!', err)
  console.log('published', eventCID.toBaseEncodedString())
})

}) }) ```

API

Check the API documentation

Notes

Currently we're still relying on a couple of forks from libp2p/ipfs projects. Hence a lot of the git dependencies in the package.json, specifically kad-dht and js-libp2p. The long term plan of course is to either merge the changes upstream or find alternative methods for our needs.

Browser support is still no guaranteed. All of the testing and development is currently being done on NodeJS only, although the plan is to have this done for the browser also :+1:

Performance and Metrics

We've tested this module under different scenarios for the purpose of our M.Sc. Thesis. For more info check our M.Sc. Thesis final document and our Pulsarcast Test Harness project.

Supporters

This module and relevant work detailed in the Pulsarcast spec has been developed by me with the amazing support and supervision of Luís Veiga, in INESC-ID Lisboa (Distributed Systems Group) and Instituto Superior Técnico, Universidade de Lisboa

A special thank you note to Microsoft Azure for sponsoring the tests for this project by providing crucial infrastructure support.

License

MIT

Owner

  • Name: João Antunes
  • Login: JGAntunes
  • Kind: user
  • Location: Lisbon
  • Company: @netlify

Citation (CITATION.cff)

title: "Pulsarcast: Scalable and reliable pub-sub over P2P networks"
abstract: "The publish-subscribe paradigm is a wildly popular form of communication in complex distributed systems. The properties offered by it make it an ideal solution for a multitude of applications, ranging from social media to content streaming and stock exchange platforms. Consequently, a lot of research exists around it, with solutions ranging from centralised message brokers, to fully decentralised scenarios (peer to peer).

Within the pub-sub realm not every solution is the same of course and trade-offs are commonly made between the ability to distribute content as fast as possible or having the assurance that all the members of the network will receive the content they have subscribed to. Delivery guarantees is something quite common within the area of centralised pub-sub solutions, there is, however, a clear lack of decentralised systems accounting for this. Specifically, a reliable system with the ability to provide message delivery guarantees and, more importantly, persistence guarantees. To this end, we present Pulsarcast, a decentralised, highly scalable, pub-sub, topic based system seeking to give guarantees that are traditionally associated with a centralised architecture such as persistence and eventual delivery guarantees.

The aim of Pulsarcast is to take advantage of the network infrastructure and protocols already in place. Relying on a structured overlay and a graph based data structure, we build a set of dissemination trees through which our events will be distributed. Our work also encompasses a software module that implements Pulsarcast, with our experimental results showing that is a viable and quite promising solution within the pub-sub and peer to peer ecosystem."
cff-version: 1.2.0
authors:
  - family-names: Antunes
    given-names: João
    orcid: "https://orcid.org/0000-0001-9062-4922"
  - family-names: Dias
    given-names: David
  - family-names: Veiga
    given-names: Luís
    orcid: "https://orcid.org/0000-0002-9285-0736"
keywords:
  - p2p
  - publish-subscribe
  - decentralised
  - reliability
  - persistence
  - "eventual delivery"
message: "My M.Sc. Thesis at Técnico, Universidade de Lisboa. If you cite this work, please cite the article from the preferred-citation"
repository: "https://github.com/jgantunes/pulsarcast"
repository-code: "https://github.com/jgantunes/js-pulsarcast"
preferred-citation:
  title: "Pulsarcast: Scalable, Reliable Pub-Sub over P2P Nets"
  abstract: "The publish-subscribe paradigm is a wildly popular form of communication in complex distributed systems. The properties offered by it make it an ideal solution for a multitude of applications, ranging from social media to content streaming and stock exchange platforms. Consequently, a lot of research exists around it, with solutions ranging from centralised message brokers, to fully decentralised scenarios (peer to peer). Within the pub-sub realm not every solution is the same of course and trade-offs are commonly made between the ability to distribute content as fast as possible or having the assurance that all the members of the network will receive the content they have subscribed to. Delivery guarantees is something quite common within the area of centralised pub-sub solutions, there is, however, a clear lack of decentralised systems accounting for this. Specifically, a reliable system with the ability to provide message delivery guarantees and, more importantly, persistence guarantees. To this end, we present Pulsarcast, a decentralised, highly scalable, pub-sub, topic based system seeking to give guarantees that are traditionally associated with a centralised architecture, such as persistence and eventual delivery guarantees. The aim of Pulsarcast is to take advantage of the network infrastructure and protocols already in place. Relying on a structured overlay and a graph based data structure, we build a set of dissemination trees through which our events will be distributed. Our work also encompasses a software module that implements Pulsarcast, with our experimental results showing that is a viable and quite promising solution within the pub-sub and peer to peer ecosystem."
  authors:
    - family-names: Antunes
      given-names: João
      orcid: "https://orcid.org/0000-0001-9062-4922"
    - family-names: Dias
      given-names: David
    - family-names: Veiga
      given-names: Luís
      orcid: "https://orcid.org/0000-0002-9285-0736"
  date-released: "2021-06-21"
  doi: "10.23919/ifipnetworking52078.2021.9472799"

GitHub Events

Total
Last Year

Committers

Last synced: over 1 year ago

All Time
  • Total Commits: 109
  • Total Committers: 3
  • Avg Commits per committer: 36.333
  • Development Distribution Score (DDS): 0.468
Past Year
  • Commits: 0
  • Committers: 0
  • Avg Commits per committer: 0.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
JGAntunes me@j****m 58
JGAntunes j****s@g****m 45
dependabot[bot] 4****] 6
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 8 months ago

All Time
  • Total issues: 11
  • Total pull requests: 32
  • Average time to close issues: 3 months
  • Average time to close pull requests: about 1 month
  • Total issue authors: 1
  • Total pull request authors: 2
  • Average comments per issue: 0.09
  • Average comments per pull request: 0.09
  • Merged pull requests: 17
  • Bot issues: 0
  • Bot pull requests: 21
Past Year
  • Issues: 0
  • Pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 0
  • Pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • JGAntunes (11)
Pull Request Authors
  • dependabot[bot] (21)
  • JGAntunes (11)
Top Labels
Issue Labels
feature (9) Medium Priority (5) High Priority (3) Low Priority (2)
Pull Request Labels
dependencies (21)

Packages

  • Total packages: 1
  • Total downloads:
    • npm 3 last-month
  • Total dependent packages: 1
  • Total dependent repositories: 3
  • Total versions: 1
  • Total maintainers: 1
npmjs.org: pulsarcast

A libp2p compatible pubsub module of the pulsarcast system

  • Versions: 1
  • Dependent Packages: 1
  • Dependent Repositories: 3
  • Downloads: 3 Last month
Rankings
Dependent repos count: 6.4%
Forks count: 9.9%
Stargazers count: 10.1%
Average: 21.1%
Dependent packages count: 21.1%
Downloads: 57.8%
Maintainers (1)
Last synced: 8 months ago

Dependencies

package-lock.json npm
  • 713 dependencies
package.json npm
  • chai ^4.2.0 development
  • eslint ^5.11.1 development
  • eslint-config-prettier ^3.3.0 development
  • eslint-config-standard ^12.0.0 development
  • eslint-plugin-import ^2.14.0 development
  • eslint-plugin-node ^8.0.0 development
  • eslint-plugin-prettier ^3.0.1 development
  • eslint-plugin-promise ^4.0.1 development
  • eslint-plugin-standard ^4.0.0 development
  • husky ^1.3.0 development
  • jsdoc-to-markdown ^5.0.0 development
  • libp2p jgantunes/js-libp2p development
  • libp2p-kad-dht jgantunes/js-libp2p-kad-dht development
  • libp2p-secio ^0.11.1 development
  • libp2p-spdy ^0.13.1 development
  • libp2p-tcp jgantunes/js-libp2p-tcp development
  • lint-staged ^8.1.0 development
  • mocha ^5.2.0 development
  • nyc ^14.0.0 development
  • prettier ^1.15.3 development
  • async ^2.6.1
  • bs58 ^4.0.1
  • cids ^0.5.5
  • debug ^3.1.0
  • ipld-dag-cbor ^0.13.0
  • joi ^13.4.0
  • joi-browser ^13.4.0
  • peer-id ^0.12.2
  • peer-info ^0.14.1
  • protons ^1.0.1
  • pull-length-prefixed ^1.3.1
  • pull-stream ^3.6.9