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 日

#331网络编程

Download history 22/week @ 2024-04-28 3/week @ 2024-05-05 7/week @ 2024-05-12 33/week @ 2024-05-19 9/week @ 2024-05-26 23/week @ 2024-06-02 12/week @ 2024-06-09 22/week @ 2024-06-16 10/week @ 2024-06-23 8/week @ 2024-06-30 17/week @ 2024-07-07 157/week @ 2024-07-14 1/week @ 2024-07-21 56/week @ 2024-07-28 1/week @ 2024-08-04 5/week @ 2024-08-11

每月 72 次下载
用于 3 个包 (2 直接)

MIT/Apache

56KB
841

Matchbox

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

为 Rust 的原生和 wasm 应用提供无痛苦的对等点对点 WebRTC 网络连接。

Matchbox 项目的目标是使 Web 浏览器或本地具有类似 UDP、无序、不可靠的 p2p 连接,以促进低延迟多人游戏。

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!

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

感谢

  • 非常感谢 Ernest Wong 的 Dango Tribute 实验matchbox_socket 从其 wasm-bindgen server_socket 吸取了大量灵感,没有它 Matchbox 可能不会存在。

许可证

此存储库中的所有代码都采用 MIT 许可证或 Apache 许可证,版本 2.0 双重许可。

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

依赖项

~11MB
~202K SLoC