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次下载
115KB
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的native和wasm应用程序提供无痛的P2P WebRTC网络。
Matchbox项目的目标是使Web浏览器或本地的UDP-like、无序、不可靠的P2P连接成为可能,以促进低延迟的多玩家游戏。
Matchbox支持不可靠和可靠的数据通道,具有可配置的排序保证和可变的分组重传。
Matchbox项目包含
- matchbox_socket:用于Wasm或本地的套接字抽象,具有
ggrs
:提供与ggrs兼容套接字的功能。
- bevy_matchbox:为Bevy游戏引擎提供的
matchbox_socket
集成 - matchbox_signaling:一个信号服务器库,带有现成的示例
- matchbox_server:一个现成的全网格信号服务器
示例
工作原理
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 人 jam 游戏
贡献
欢迎 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许可定义的,您提交给作品的所有有意贡献,将按上述方式双许可,不附加任何额外条款或条件。
依赖项
~27–70MB
~1M SLoC