3个版本
0.1.2 | 2022年5月27日 |
---|---|
0.1.1 | 2022年5月21日 |
0.1.0 | 2022年5月21日 |
#20 in #p2p-communication
115KB
2.5K SLoC
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