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日 |
#1643 in 网络编程
每月774次下载
用于6个Crate(3 直接使用)
11KB
52 行
为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,主分支 0.13 0.9 0.12 0.8 0.11 0.7 0.10 0.6 < 0.9 不支持
示例
工作原理
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 人即兴游戏
- Lavagna - 在线会议的协作黑板
贡献
欢迎 PR!
如果您有任何问题或建议,请随时创建一个 问题。如果您想联系,还有一个 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许可定义的任何有意提交以包含在作品中的贡献,应如上所述双重许可,不附加任何其他条款或条件。
依赖项
~0.6-1.4MB
~30K SLoC