Python C JavaScript C++ Makefile Java Other
Latest commit deb3cb5 Mar 24, 2017 @gappleto97 gappleto97 committed on GitHub Disable specific check [skip ci]
Permalink
Failed to load latest commit information.
.scripts Attempt to fix OSX python 3.6 tests Feb 13, 2017
c_src Increment Version Feb 22, 2017
cp_src Make C/C++ differentiation more clear; Fix malformed table Dec 13, 2016
docs Increment Version Feb 22, 2017
js_src Remove debug print Feb 28, 2017
jv_src Increment version number Jan 1, 2017
py_src Fix mypy issues Feb 28, 2017
sm_src Increment version number Jan 1, 2017
.babelrc Add compatability plugin Feb 8, 2017
.codeclimate.yml Disable specific check [skip ci] Mar 24, 2017
.codecov.yml Add .codecov.yml [skip ci] Jan 22, 2017
.coveragerc Fix errors Aug 25, 2016
.gitattributes Correct language statistics [skip ci] Nov 15, 2016
.gitignore Add beginings of sphinx documentation Aug 3, 2016
.gitmodules Add msgpack-c Jan 26, 2017
.npmignore Add .npmignore [skip ci] Oct 12, 2016
.travis.yml Merge pull request #138 from p2p-today/develop Feb 15, 2017
.yarnrc Add yarn files Jan 8, 2017
CONTRIBUTING.rst Update python documentation Sep 2, 2016
LICENSE Relicense to LGPL v3 Jun 3, 2016
MANIFEST.in Add requirements.txt Dec 26, 2016
Makefile Correct makefile recipe Feb 17, 2017
README.md Update limitations on chord/sync socket [skip ci] Feb 17, 2017
appveyor.yml Add Python 3.6 testing Feb 12, 2017
npm-shrinkwrap.json fix typo Mar 24, 2017
package.json Increment Version Feb 22, 2017
requirements.txt Make versions less specific Feb 16, 2017
setup.cfg Change pytest parameters Aug 23, 2016
setup.py Merge branch 'mypy' into develop Feb 14, 2017
shippable.yml Remove pypy test Feb 27, 2017
yarn.lock Add compatability plugin Feb 8, 2017

README.md

To see a better formatted, more frequently updated version of this, please visit docs.p2p.today, or for the develop branch, dev-docs.p2p.today.

Current build status:

shippable travis appveyor codeclimate codecov

waffleio_queued waffleio_in_progress waffleio_in_review

Goal

We are trying to make peer-to-peer networking easy. Right now there's very few libraries which allow multiple languages to use the same distributed network.

We're aiming to fix that.

What We Have

There are several projects in the work right now. Several of these could be considered stable, but we're going to operate under the "beta" label for some time now.

Base Network Structures

All of our networks will be built on common base classes. Because of this, we can guarantee some network features.

  1. Networks will have as much common codebase as possible
  2. Networks will have opportunistic compression across the board
  3. Node IDs will be generated in a consistent manner
  4. Command codes will be consistent across network types

Mesh Network

This is our unorganized network. It operates under three simple rules:

  1. The first node to broadcast sends the message to all its peers
  2. Each node which receives a message relays the message to each of its peers, except the node which sent it to them
  3. Nodes do not relay a message they have seen before

Using these principles you can create a messaging network which scales linearly with the number of nodes.

Currently there is an implementation in Python and Javascript <https:dev-docs.p2p.today/javascript/mesh>. More tractable documentation can be found in their tutorial sections. For a more in-depth explanation you can see it's specifications or this slideshow.

Sync Table

This is an extension of the above network. It inherits all of the message sending properties, while also syncronizing a local dictionary-like object.

The only limitation is that it can only have string-like keys. There is also an optional "leasing" system, which is enabled by default. This means that a user can own a particular key for a period of time.

Currently there is an implementation in Python and Javascript. More tractable documentation can be found in their tutorial sections. Protocol specifications are in progress.

Chord Table

This is a type of distributed hash table based on an MIT paper which defined it.

The idea is that you can use this as a dictionary-like object. The only limitation is that it can only have string-like keys. It uses five separate hash tables for hash collision avoidance and data backup in case a node unexpectedly exits.

Currently there is an implementation in Python and Javascript. More tractable documentation can be found in their tutorial sections. Protocol specifications are in progress.

Contributing, Credits, and Licenses

Contributors are always welcome! Information on how you can help is located on the Contributing page.

Credits and License are located on their own page.

Donate

Bitcoin: 1BwVXxPj9JSEUoAx3HvcNjjJTHb2qsyjUr