#p2p-communication #communication #p2p #udp #general-purpose #udp-holepunching

aether_lib

为Prototype Aether提供P2P通信的库。包含Aether协议的实现。此库可以用于开发P2P应用。

3个版本

0.1.2 2022年5月27日
0.1.1 2022年5月21日
0.1.0 2022年5月21日

#20 in #p2p-communication

GPL-3.0 许可证

115KB
2.5K SLoC

Build Tests License

Aether Lib

Prototype Aether是一个通用目的的P2P通信协议。它允许开发者使用易于使用的库来开发P2P应用。

aether_lib Rust库包含协议的实际实现。可以直接作为Rust库用于开发应用。然而,目前正在开发中的Aether Service是推荐与Aether交互的方式。

Aether Lib的文档可以在这里找到

安装

aether_lib添加到您的项目中Cargo.toml中,如下所示:

[dependencies]
aether_lib = "0.1.1"

基本用法

以下示例展示了如何使用aether_lib进行P2P通信。

网络要正常运行需要追踪服务器。追踪服务器帮助进行节点发现,并为UDP Holepunching(节点介绍)提供节点的公共身份。

启动客户端

为了使用P2P通信,您需要初始化一个Aether实例。可以按照以下方式操作:

use std::net::{IpAddr, Ipv4Addr, SocketAddr};
use aether_lib::peer::Aether;

// The socker address of a tracker server to be used
let tracker_addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(1, 2, 3, 4)), 8982);

// Initalize the link with a given tracker address
let aether = Aether::new(tracker_addr);

// Start the link
aether.start();

连接到节点

要启动与其他节点的P2P连接,请使用Aether中的connect()函数。

let peer_uid = String::from("<peer-uid-here>");
aether.connect(&peer_uid);

向另一个节点发送字节数据

所有通信都以字节数据的形式进行,因此您可以发送Vec<u8>。例如,字符串可以使用string.into_bytes()(此操作转换为UTF-8编码)转换为字节数据,并使用let string = String::from_utf8(bytes)从UTF-8编码的字节数据转换回字符串。

为了向用户 peer_uid 发送字节,你可以使用 send_to()

let message = String::from("Hello");
let bytes = message.into_bytes();
aether.send_to(&peer_uid, bytes).unwrap();

从另一个节点接收字节

为了从用户 peer_uid 接收字节,你可以使用 recv_from()

let bytes = aether.recv_from(&peer_uid).unwrap();
let message = String::from_utf8(bytes).unwrap();

依赖项

~4–16MB
~232K SLoC