#bevy #client-server #async-networking #messages #tokio #plugin #events

bevy_spicy_networking

Bevy 的一个香辣 🌶🌶🌶 且简单的网络插件

5 个版本

0.6.0 2021 年 6 月 10 日
0.5.2 2021 年 4 月 12 日
0.5.1 2021 年 4 月 11 日
0.5.0 2021 年 4 月 11 日
0.5.0-pre12021 年 4 月 9 日

#1420 in 游戏开发

42 每月下载量

MIT 许可证

48KB
877

Bevy 的 Spicy Networking

crates.io docs.rs spicy

bevy_spicy_networking 是解决您 bevy 游戏中“如何将多个客户端连接到单个服务器”问题的方案。


使用 tokio 作为异步后端,它完全集成到 bevy 中,允许您快速将网络添加到游戏中。只需添加服务器/客户端插件,注册您计划接收的消息类型,并将它们作为事件监听即可!

它旨在作为网络统一包。其他包可以通过注册它们自己的消息来扩展您的游戏。这是通过惊人的 typetag 包实现的。


内容

文档

您可以查看 在线文档,或者通过克隆此仓库并运行 cargo doc -p bevy_spicy_networking 来构建它。

对于示例,请查看 示例目录

  • server.rs 中,您将找到一个简单的聊天服务器,它会广播从客户端接收到的消息
  • client.rs 中,您将找到一个简单的图形聊天客户端,您可以通过它连接到服务器并发送消息

(注意:由于 bevy 不包含文本输入小部件,这是一个非常简化的演示。一旦 bevy 的 UI 部分更完整,这将很容易扩展。)

快速入门

  1. bevy_spicy_networkingserde_derivetypetag 添加到您的 Cargo.toml
  2. 创建您希望客户端和服务器之间交换的消息,或反之。
    • 在它上面实现 Serde 的 Serialize 和 Deserialize
    • 实现 NetworkMessage,并确保使用 typetag::serde 进行注释
    • 当从客户端发送到服务器时,实现 ServerMessage
    • 当从服务器发送到客户端时,实现 ClientMessage
#[derive(Serialize, Deserialize)]
struct WhisperMessage {
    recipient: UserId,
    message: String,
}

#[typetag::serde]
impl NetworkMessage for WhisperMessage {}

// In this case, its a client sending a message to a server
impl ServerMessage for WhisperMessage {
    const NAME: &'static str = "example:WhisperMessage"; // This name needs to be unique!
    // Otherwise, the recipient will mix up the messages
}
  1. 在接收方,注册要接收的类型
use bevy_spicy_networking::AppNetworkServerMessage;

let appbuilder: &mut AppBuilder = /* Get an AppBuilder, which is returned by bevy from App::build() */;


// Now whenever a client sends a `WhisperMessage` the server will generate an event of
// `NetworkData<WhisperMessage>` which your application can then handle
appbuilder.listen_for_server_message::<WhisperMessage>();
  1. 监听该类型的事件
fn handle_incoming_whisper_messages(
    mut whisper_messages: EventReader<NetworkMessage<WhisperMessage>>,
) {
    for whisper_message in whisper_messages.iter() {
        // Handle the whisper
    }
}
  1. 在您的游戏中享受简单且🌶️的联网!

Bevy 版本兼容性

简单地选择与您的 bevy 版本兼容的版本

Bevy Spicy Networking Bevy
0.6 0.5

与最新 bevy 版本不兼容的任何版本都处于维护模式。它将只接收我或社区提供的少量错误修复。

支持的平台

目前仅正式支持 LinuxWindows,我不明白为什么 MacOS 不会,但我没有 Mac 进行测试。如果您有 Mac,并希望测试它并反馈,请告诉我!

路线图

目前 bevy_spicy_networking 仅使用 TCP。这将在某个时候改变,单个消息将能够指定它们应该如何传递。此更改将是兼容的,或者只需要进行少量更改。

使用 bevy_spicy_networking 的包

目前没有,您可以通过发送 PR 并将其添加到下面的表格中来帮助扩展此列表!

名称 版本
- -

贡献

要贡献力量,请简单地分叉存储库并发送 PR。如果您有任何问题或建议,请随时在 bevy discord 上的 @Hemera#0001 聊天。

依赖关系

~18–30MB
~487K SLoC