4个版本

0.6.4 2023年4月30日
0.6.3 2023年4月29日
0.6.1 2023年4月18日
0.6.0 2023年4月18日

20#p2p-communication

每月40次下载

MIT/Apache

115KB
2K SLoC

Matchbox

这是matchbox的分支,用于测试使用nostr而不是matchbox服务器连接玩家。

在mac os上编译nostr将需要LLVM

brew install llvm
LLVM_PATH=$(brew --prefix llvm)
AR="${LLVM_PATH}/bin/llvm-ar" CC="${LLVM_PATH}/bin/clang" cargo build --target wasm32-unknown-unknown

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

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

Matchbox项目的目标是使Web浏览器或本地的UDP-like、无序、不可靠的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!

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

感谢

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

许可证

此存储库中的所有代码都同时受以下许可证之一的双重许可:

除非您明确声明,否则根据Apache-2.0许可定义的,您提交给作品的所有有意贡献,将按上述方式双许可,不附加任何额外条款或条件。

依赖项

~27–70MB
~1M SLoC