6个版本 (破坏性更新)

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.0.1 2021年9月11日

#1192 in 网络编程

Download history 141/week @ 2024-05-03 119/week @ 2024-05-10 137/week @ 2024-05-17 124/week @ 2024-05-24 134/week @ 2024-05-31 129/week @ 2024-06-07 116/week @ 2024-06-14 139/week @ 2024-06-21 100/week @ 2024-06-28 114/week @ 2024-07-05 230/week @ 2024-07-12 85/week @ 2024-07-19 103/week @ 2024-07-26 98/week @ 2024-08-02 113/week @ 2024-08-09 67/week @ 2024-08-16

每月394次下载
用于 2 crates

MIT/Apache

160KB
2.5K SLoC

Matchbox

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

为Rust的本地和wasm应用程序提供无痛的P2P WebRTC网络。

Matchbox项目的目标是启用类似于UDP的、无序的、不可靠的P2P连接,在Web浏览器或本地环境中,以方便低延迟多人游戏。

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 事件)。

然后,节点通过信号服务器协商建立连接。发起者发送一个 "offer",接收者回应一个 "answer"。一旦节点之间传递了足够的信息,每个节点都将建立 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许可证定义的任何有意提交以包含在作品中的贡献,将按照上述方式双许可,没有任何额外的条款或条件。

依赖项

~20–66MB
~1M SLoC