15个版本 (重大变更)

0.10.0 2024年7月15日
0.9.0 2024年3月9日
0.8.1 2024年1月12日
0.8.0 2023年11月14日
0.1.2 2021年9月26日

906网络编程

Download history 190/week @ 2024-05-02 126/week @ 2024-05-09 179/week @ 2024-05-16 206/week @ 2024-05-23 158/week @ 2024-05-30 176/week @ 2024-06-06 122/week @ 2024-06-13 171/week @ 2024-06-20 110/week @ 2024-06-27 126/week @ 2024-07-04 279/week @ 2024-07-11 179/week @ 2024-07-18 309/week @ 2024-07-25 161/week @ 2024-08-01 146/week @ 2024-08-08 81/week @ 2024-08-15

每月728次下载
用于3个库(通过bevy_matchbox

MIT/Apache

115KB
2K SLoC

Matchbox

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

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

Matchbox项目目标是实现类似于UDP的无序、不可靠的点对点连接,在浏览器或本地环境中,以促进低延迟多人游戏。

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

Matchbox项目包含

  • matchbox_socket:一个Wasm或本地套接字抽象,有
    • ggrs:提供与ggrs兼容套接字的功能。
  • matchbox_signaling:一个信号服务器库,有现成的示例
  • matchbox_server:一个现成的全网状信号服务器
  • bevy_matchbox:为Bevy游戏引擎提供的matchbox_socket集成
    bevy bevy_matchbox
    0.14 0.10, main
    0.13 0.9
    0.12 0.8
    0.11 0.7
    0.10 0.6
    < 0.9 不受支持

示例

工作原理

Connection

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

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

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

节点随后通过信令服务器协商连接。发起者发送一个“提议”,接收者以一个“响应”回应。一旦节点之间传递了足够的信息,就会为每个节点建立一个 RTCPeerConnection,它包含一个或多个数据通道。

然而,所有这些都隐藏在 Rust 应用程序代码之外。客户端需要做的只是

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

您可以通过套接字的 API 将钩子连接到套接字的生存周期,例如连接状态更改。同样,您可以通过简单的非阻塞方法使用套接字向节点发送数据包。

展示

使用 Matchbox 的项目

贡献

欢迎 PR!

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

感谢

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

许可

此存储库中的所有代码都根据以下任一许可进行双许可

除非您明确说明,否则根据Apache-2.0许可证定义,您有意提交的任何贡献,旨在包含在作品中,应以上述方式双重许可,不附加任何额外条款或条件。

依赖项

~2–24MB
~333K SLoC