#web-rtc #p2p #peer-connection #sockets #signaling-server #gamedev

matchbox_socket_nostr

使用 nostr 实现的无痛 WebRTC 点对点全网状网络套接字

8 个版本

0.6.4 2023 年 4 月 30 日
0.6.3 2023 年 4 月 29 日
0.0.4 2023 年 1 月 25 日

#1884网络编程

Download history 1/week @ 2024-03-13 14/week @ 2024-03-27 23/week @ 2024-04-03 2/week @ 2024-05-22

65 每月下载次数
bevy_matchbox_nostr 中使用

MIT/Apache

105KB
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 的本地和 wasm 应用程序提供无痛的点对点 WebRTC 网络。

Matchbox 项目的目标是启用类似 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!

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

感谢

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

许可证

本存储库中的所有代码都根据以下其中之一进行双授权:

除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交给作品包含的任何贡献,都应如上所述进行双授权,不附加任何额外条款或条件。

依赖项

~9–28MB
~441K SLoC