#data-channel #web-rtc #p2p #signaling-server #networking

wasm-peers-protocol

Rust 编写、编译为 WASM 的 WebRTC 数据通道点对点连接的易用封装

3 个版本

0.3.2 2022 年 2 月 7 日
0.3.1 2022 年 2 月 7 日
0.3.0 2022 年 2 月 7 日

684WebAssembly 中排名

每月 31 次下载
用于 2 crates

MIT/Apache

8KB
92

wasm-peers

此 crate 提供了围绕 WebRTC 和 DataChannels 的点对点连接的易用封装。

概述

正如著名的 agar.io 的创造者所说 WebRTC 是困难的。此库旨在通过抽象出所有设置,并提供一种简单的方式来通过数据通道发送和接收消息来帮助。

只需提供来自 配套 crate 的信号服务器实例的地址,并指定两个回调即可。一个用于连接打开时,另一个用于接收消息时。之后,您可以发送和接收消息而无需担心实现细节。

库包含三种网络拓扑,一对一,它创建两个对等实体之间的等价连接,一对多,它指定主机和任意数量的客户端,以及 多对多,它为每一对对等实体创建连接,并允许向其中的任何一个发送消息。

示例

此示例展示了两个对等实体相互发送 pingpong 消息。

use wasm_peers::ConnectionType;
use wasm_peers::one_to_one::NetworkManager;
use web_sys::console;

// there must be a signaling server from accompanying crate running on this port
const SIGNALING_SERVER_URL: &str = "ws://0.0.0.0:9001/one-to-one";

fn main() {
  // there must be some mechanism for exchanging session ids between peers
  let session_id = SessionId::new("some-session-id".to_string());
  let mut peer1 = NetworkManager::new(
    SIGNALING_SERVER_URL,
    session_id.clone(),
    ConnectionType::Stun,
  ).unwrap();

  let peer1_clone = peer1.clone();
  let peer1_on_open = move || peer1_clone.send_message("ping!").unwrap();
  let peer1_on_message = {
    move |message| {
      console::log_1(&format!("peer1 received message: {}", message).into());
    }
  };
  peer1.start(peer1_on_open, peer1_on_message).unwrap();

  let mut peer2 = NetworkManager::new(
    SIGNALING_SERVER_URL,
    session_id,
    ConnectionType::Stun,
  ).unwrap();
  let peer2_on_open = || { /* do nothing */ };
  let peer2_clone = peer2.clone();
  let peer2_on_message = {
    let peer2_received_message = peer2_received_message.clone();
    move |message| {
      console::log_1(&format!("peer2 received message: {}", message).into());
      peer2_clone.send_message("pong!").unwrap();
    }
  };
  peer2.start(peer2_on_open, peer2_on_message).unwrap();
}

有关其他拓扑的示例,请参阅文档。

有关更高级的示例,请查看使用此库构建的“生产就绪”应用程序: Live Document

作者

Tomasz Karwowski
LinkedIn

版本历史

  • 0.3
    • 公开发布的初始版本

许可证

本项目受以下许可证之一许可:

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义的,您提交给作品以包含在内的任何有意贡献,都将如上所述双许可,而无需任何额外条款或条件。

致谢

这些项目帮助我掌握了 Rust 中的 WebRTC

此外,还要特别感谢与我一起完成我的工程学士学位论文的伙伴们。

依赖项

~0.4–1MB
~23K SLoC