8 个版本
0.6.4 | 2023 年 4 月 30 日 |
---|---|
0.6.3 | 2023 年 4 月 29 日 |
0.0.4 | 2023 年 1 月 25 日 |
#1884 在 网络编程
65 每月下载次数
在 bevy_matchbox_nostr 中使用
105KB
2K SLoC
这是 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
为 Rust 的本地和 wasm 应用程序提供无痛的点对点 WebRTC 网络。
Matchbox 项目的目标是启用类似 UDP 的、无序的、不可靠的 p2p 连接,以便在浏览器或本地环境中进行低延迟多人游戏。
Matchbox 支持不可靠和可靠的数据通道,具有可配置的排序保证和可变的数据包重传。
Matchbox 项目包含
- matchbox_socket:一个针对 Wasm 或本地的套接字抽象,包含
ggrs
:一个提供与 ggrs 兼容套接字的功能。
- bevy_matchbox:为 Bevy 游戏引擎提供的
matchbox_socket
集成 - matchbox_signaling:一个信号服务器库,提供可用的示例
- matchbox_server:一个可用的全网状信号服务器
示例
- simple:使用 matchbox_socket 的简单通信循环
- bevy_ggrs:一个浏览器游戏示例,使用
bevy
和bevy_ggrs
- 实时 2 人演示:https://helsing.studio/box_game/
- 实时 4 人演示:https://helsing.studio/box_game/?players=4
工作原理
WebRTC 允许直接在端点之间建立连接,但为了建立这些连接,需要某种信令服务。 matchbox_server
就是这样一种服务。然而,一旦连接建立,数据将直接在端点之间传输,不会通过信令服务器传输。
信令服务需要在一个所有客户端都可以通过 http 或 https 连接访问的地方运行。在生产环境中,这通常意味着公共互联网。
当客户端想要加入一个 p2p(网状)网络时,它连接到信令服务。然后信令服务器会通知已经连接的端点关于新端点(发送一个 NewPeer
事件)。
端点随后通过信令服务器协商连接。发起者发送一个 "offer",接收者回应一个 "answer"。一旦端点之间传递了足够的信息,就会为每个端点建立一个 RTCPeerConnection,这会带来一个或多个数据通道。
然而,所有这些对 Rust 应用程序代码都是隐藏的。在客户端,你只需要做的是
- 创建一个新的套接字,并给它一个信令服务器 URL
.await
处理新消息的消息循环 future。
您可以通过套接字的 API 将钩子连接到套接字的生命周期,例如连接状态更改。同样,您可以通过简单的非阻塞方法使用套接字向端点发送数据包。
展示
使用 Matchbox 的项目
- NES Bundler - 将您的 NES 游戏转换为一个针对您最喜欢的操作系统的单个可执行文件!
- Cargo Space(开发中)- 一个关于共同建造和驾驶飞船的 2D 合作太空游戏
- Extreme Bevy - 简单的 2 人街机射击游戏
- Matchbox 示例
- A Janitors Nightmare - 2 人即兴游戏
贡献
欢迎 PR!
如果您有任何问题或建议,请随时创建一个 issue。如果您想联系,还有一个 Discord 频道。
感谢
- 非常感谢 Ernest Wong 的 Dango Tribute 实验!
matchbox_socket
从其 wasm-bindgen server_socket 中汲取了大量灵感,如果没有它,Matchbox 可能不会存在。
许可证
本存储库中的所有代码都根据以下其中之一进行双授权:
- MIT 许可证 或 http://opensource.org/licenses/MIT
- Apache 许可证,版本 2.0 或 http://www.apache.org/licenses/LICENSE-2.0
除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交给作品包含的任何贡献,都应如上所述进行双授权,不附加任何额外条款或条件。
依赖项
~9–28MB
~441K SLoC