#p2p #networking #tcp-connection #async #send-message #send-receive

pea2pea

一个简单、底层且可定制的TCP P2P节点实现

67个版本 (重大变更)

0.50.0 2024年7月5日
0.49.0 2023年12月29日
0.48.0 2023年7月3日
0.45.0 2023年1月13日
0.8.0 2020年12月31日

#1022 in 网络编程

Download history 312/week @ 2024-04-25 306/week @ 2024-05-02 204/week @ 2024-05-09 246/week @ 2024-05-16 192/week @ 2024-05-23 113/week @ 2024-05-30 179/week @ 2024-06-06 137/week @ 2024-06-13 205/week @ 2024-06-20 103/week @ 2024-06-27 305/week @ 2024-07-04 152/week @ 2024-07-11 122/week @ 2024-07-18 210/week @ 2024-07-25 165/week @ 2024-08-01 117/week @ 2024-08-08

每月632次下载
用于 2 Crate

CC0许可证

230KB
1K SLoC

pea2pea

crates.io docs.rs dependencies actively developed issues

pea2pea是一个简单、底层且可定制的TCP P2P节点实现。

核心库仅提供最基本的函数,如启动、结束和维护连接;其余功能由一些可选的低级协议提供。

  • Handshake要求连接在执行其他操作之前必须遵循给定的握手逻辑。
  • Reading允许节点根据用户提供的解码器接收消息。
  • Writing允许节点根据用户提供的编码器发送消息。
  • OnDisconnect使节点在断开与对等方的连接时执行指定的操作。
  • OnConnect使节点在与对等方完全建立连接(握手之后)时执行指定的操作。

目标

  • 小型、简单、无框架的代码库:整个库大约有1k行代码,且依赖项很少。
  • 易用性:对象和特质少,没有“turboeels”或泛型/引用等会强迫所有父对象适应的因素。
  • 正确性:使用稳定版Rust构建,没有unsafe代码,测试代码多于实际库中的代码。
  • 底层:用户可以完全控制所有连接以及发送或接收的每个字节。
  • 良好的性能:在有利的情况下超过10GB/s,内存占用小。

如何使用

  1. 定义一个包含Node以及您想要与之一起携带的任何额外状态的克隆结构。
  2. 为它实现简单的Pea2Pea特质。
  3. 实现所有/任何的协议
  4. 创建相应的结构体(或您想要的任意多个)
  5. 启用您希望它们使用的协议

这就完成了!

示例

状态

  • 所有期望的功能都已实现
  • 该包遵循semver规范,在1.0之前仍可能存在一些API破坏
  • 该项目正在积极开发中,所有变更都记录在CHANGELOG
  • 在Rust中尚未提供的一些期望功能包括关联类型默认值
  • 该项目旨在始终使用当前的稳定Rust编译器构建;不支持旧版本,但它们可能也可以工作

依赖项

~4–12MB
~125K SLoC