#p2p #web-rtc #wasm-bindgen #peer #peer-connection #built

wasm_p2p

Rust + WASM的简单点对点库,基于WebRTC构建

4个版本

0.1.3 2024年7月18日
0.1.2 2024年7月12日
0.1.1 2024年7月10日
0.1.0 2024年7月10日

427WebAssembly

Download history 172/week @ 2024-07-05 190/week @ 2024-07-12 49/week @ 2024-07-19 7/week @ 2024-07-26 1/week @ 2024-08-02

每月 127 次下载

MIT 许可证

22KB
410

WASM P2P

Rust + WASM的简单点对点库,基于WebRTC构建


介绍

这是一个简单的Rust + WASM点对点库,基于WebRTC构建。在以下示例中,我们将连接到另一个对等点并向其发送Hello world

use wasm_p2p::{wasm_bindgen_futures, P2P};

fn main() {
    wasm_bindgen_futures::spawn_local(main_async());
}

async fn main_async() {
    let p2p = P2P::new("wss://signaling.luisherasme.com").await;
    let peer = p2p.connect("other-peer-id").await;
    peer.send("Hello world");
}

安装

cargo add wasm_p2p

使用

设置

为了建立点对点连接,我们需要将我们的IP地址等信息发送给另一个对等点,以便它知道如何到达我们。我们用来交换这些信息的服务器称为信令服务器。

要初始化P2P客户端,您需要传递信令服务器的URL

let mut p2p = P2P::new("wss://signaling.luisherasme.com").await;

在上一个示例中,我们使用wss://signaling.luisherasme.com作为信令服务器。此服务器免费,代码是开源的,因此您可以创建自己的版本。代码可在此处找到。

对等ID

信令服务器为每个对等点分配一个随机、唯一的ID

let id = p2p.id();

连接

您可以通过调用带有目标对等点ID的p2p.connect来启动连接。

let connection = p2p.connect("OTHER_PEER_ID").await;

您可以通过调用p2p.receive_connections来获取所有新的连接。

let connections = p2p.receive_connections();

接收消息

要接收连接到您的其他对等点的消息,您可以调用receive方法

let messages = connection.receive();

发送消息

要向另一个对等点发送消息,您必须使用send方法

let data = "EXAMPLE DATA YOU CAN SEND ANY &STR";
peer.send(data);

自定义ICE服务器

您可以设置自己的ICE服务器

use wasm_p2p::{wasm_bindgen_futures, ConnectionUpdate, P2P, IceServer};

fn main() {
    wasm_bindgen_futures::spawn_local(main_async());
}

async fn main_async() {
    let mut p2p = P2P::new("wss://signaling.luisherasme.com");

    let ice_servers = vec![IceServer {
        urls: String::from("stun:stun.l.google.com:19302"),
        credential: None,
        credential_type: None,
        username: None,
    }];

    p2p.set_ice_servers(ice_servers);
}

此外,您可以从&str创建ICE服务器

use wasm_p2p::{wasm_bindgen_futures, ConnectionUpdate, P2P, IceServer};

fn main() {
    wasm_bindgen_futures::spawn_local(main_async());
}

async fn main_async() {
    let mut p2p = P2P::new("wss://signaling.luisherasme.com");
    let ice_servers = vec![IceServer::from("stun:stun.l.google.com:19302")];
    p2p.set_ice_servers(ice_servers);
}

示例

依赖

~8–11MB
~196K SLoC