pea2pea

pea2pea is a P2P library designed with the following use cases in mind:
- simple and quick creation of custom P2P networks
- testing/verifying network protocols
- benchmarking and stress-testing P2P nodes (or other network entities)
- substituting other, "heavier" nodes in local network tests
goals
- small, simple codebase: the library - including the optional protocols - is under 1k LOC and there are few dependencies
- ease of use: few objects and traits, no "turboeels" or generics/references forcing all parent objects to adapt
- correctness: no
unsafe
code; there's more code in tests
than in the actual library
- interoperability: strives to be as versatile as possible without sacrificing simplicity and ease of use
- good performance: over 1GB/s in favorable scenarios, small memory footprint
non-goals
no_std
- becoming a framework
- support for multiple
async
runtimes (it should be simple enough to change it, though)
- any functionality that can be introduced "on top" (e.g. DHT, advanced topology formation algorithms etc.)
how to use it
- define a clonable struct containing a
Node
and any extra state you'd like to carry
impl Pea2Pea
for it
- make it implement any/all of the protocols
- create that struct (or as many of them as you like)
- enable protocols you'd like the node(s) to utilize
That's it!
examples
- the tests directory contains some examples of simple use
- examples contain more advanced setups, e.g. using noise encryption
- try running
cargo run --example <example_name>
with different RUST_LOG
verbosity levels to check out what's going on under the hood