5个版本 (破坏性)

0.10.0 2024年7月15日
0.9.0 2024年3月9日
0.8.0 2023年11月14日
0.7.0 2023年8月11日
0.6.0 2023年3月31日

#1643 in 网络编程

Download history 237/week @ 2024-04-15 190/week @ 2024-04-22 186/week @ 2024-04-29 148/week @ 2024-05-06 133/week @ 2024-05-13 182/week @ 2024-05-20 134/week @ 2024-05-27 157/week @ 2024-06-03 110/week @ 2024-06-10 114/week @ 2024-06-17 142/week @ 2024-06-24 94/week @ 2024-07-01 140/week @ 2024-07-08 336/week @ 2024-07-15 157/week @ 2024-07-22 127/week @ 2024-07-29

每月774次下载
用于6个Crate3 直接使用)

MIT/Apache

11KB
52

Matchbox

crates.io MIT/Apache 2.0 crates.io docs.rs

为Rust的本地和wasm应用提供无痛苦的对等网络WebRTC网络。

Matchbox项目旨在在Web浏览器或本地启用类似UDP的无序、不可靠的p2p连接,以促进低延迟多人游戏。

Matchbox支持不可靠和可靠的数据通道,具有可配置的排序保证和可变的数据包重传。

Matchbox项目包含

示例

工作原理

Connection

WebRTC 允许点对点直接连接,但为了建立这些连接,需要某种信令服务。 matchbox_server 就是这样的服务。然而,一旦连接建立,数据将直接在点之间流动,不会通过信令服务器。

信令服务需要在所有客户端都能通过 http 或 https 连接访问的地方运行。在生产环境中,这通常意味着公共互联网。

当客户端想要加入一个 p2p(网状)网络时,它会连接到信令服务。然后信令服务器会通知已经连接的节点关于新节点(发送一个 NewPeer 事件)。

节点随后通过信令服务器协商连接。发起者发送一个 "offer",接收者则回复一个 "answer"。一旦节点之间传递了足够的信息,就会为每个节点建立一个新的 RTCPeerConnection,其中包含一个或多个数据通道。

然而,这一切对于 rust 应用程序代码来说都是隐藏的。在客户端,你所需要做的就是

  • 创建一个新的套接字,并给它一个信令服务器 URL
  • .await 处理新消息的消息循环 future。
    • 如果你使用 Bevy,这会由 bevy_matchbox 自动完成(请参阅 bevy_ggrs 示例)。
    • 否则,如果你使用 WASM,wasm-bindgen-futures 可以帮助(请参阅 simple 示例)。
    • 或者,可以手动轮询 future,即每帧一次。

您可以通过套接字的 API(如连接状态更改)来挂钩套接字的生存周期。同样,您可以通过简单的不阻塞方法通过套接字向节点发送数据包。

展示

使用 Matchbox 的项目

贡献

欢迎 PR!

如果您有任何问题或建议,请随时创建一个 问题。如果您想联系,还有一个 Discord 频道

感谢

  • 非常感谢 Ernest Wong 的 Dango Tribute 实验matchbox_socket 受其 wasm-bindgen server_socket 启发很大,如果没有它,Matchbox 可能不会存在。

许可

本仓库中的所有代码都采用以下任一许可证的双重许可

除非您明确声明,否则您根据Apache-2.0许可定义的任何有意提交以包含在作品中的贡献,应如上所述双重许可,不附加任何其他条款或条件。

依赖项

~0.6-1.4MB
~30K SLoC