56 releases (breaking)

Uses new Rust 2021

0.39.0 Jun 24, 2022
0.37.0 May 3, 2022
0.35.1 Mar 25, 2022
0.29.0 Nov 25, 2021
0.8.0 Dec 31, 2020

#528 in Network programming

Download history 385/week @ 2022-03-10 382/week @ 2022-03-17 208/week @ 2022-03-24 291/week @ 2022-03-31 211/week @ 2022-04-07 96/week @ 2022-04-14 148/week @ 2022-04-21 764/week @ 2022-04-28 705/week @ 2022-05-05 929/week @ 2022-05-12 380/week @ 2022-05-19 769/week @ 2022-05-26 842/week @ 2022-06-02 100/week @ 2022-06-09 114/week @ 2022-06-16 159/week @ 2022-06-23

1,503 downloads per month

CC0 license

63KB
1K SLoC

pea2pea

crates.io docs.rs files LOC dependencies issues

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 core library 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 10GB/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

  1. define a clonable struct containing a Node and any extra state you'd like to carry
  2. impl Pea2Pea for it
  3. make it implement any/all of the protocols
  4. create that struct (or as many of them as you like)
  5. 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

Dependencies

~4–10MB
~172K SLoC