8个不稳定版本 (3个破坏性更新)

0.9.0 2024年7月24日
0.8.0 2024年2月19日
0.7.2 2022年5月12日
0.7.1 2022年4月22日
0.6.2 2022年2月23日

#218 in 网络编程

Download history 7/week @ 2024-05-21 2/week @ 2024-05-28 8/week @ 2024-06-04 6/week @ 2024-06-11 1/week @ 2024-06-18 4/week @ 2024-06-25 8/week @ 2024-07-02 137/week @ 2024-07-23 9/week @ 2024-07-30

每月下载量146次
用于bevy_eventwork_mod_websoc…

MIT许可证

64KB
966

bevy_eventwork是解决你在bevy游戏中“如何连接多个bevy实例”问题的方案,从优秀的bevy_spicy_networking分支而来,进行了大量的模块化和重大更改,包括移除tokio和typetag等大型依赖。

内容

文档

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

有关示例,请参阅示例目录

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

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

快速入门

  1. bevy_eventworkserde 添加到您的 Cargo.toml 文件中。
  2. 创建您希望在客户端和服务器之间交换的消息,或者反之。
    • 在它上面实现 Serde 的 Serialize 和 Deserialize。
    • 实现 NetworkMessage
#[derive(Serialize, Deserialize)]
struct WhisperMessage {
    recipient: UserId,
    message: String,
}

/// In this example, we'll be sending this from a client to a server,
/// BUT, any eventwork bevy instance could recieve the message as
/// long as they register to listen for it.
impl NetworkMessage for WhisperMessage {
    const NAME: &'static str = "example:WhisperMessage";
}
  1. 在接收方,设置应用程序并注册要接收的类型。
use bevy_eventwork::{AppNetworkMessage, tcp::TcpProvider};

fn main() {
    let mut app = App::new();

    /// Add the EventworkPlugin specifying what Transport to use and what runtime
    app.add_plugins(bevy_eventwork::EventworkPlugin::<
        TcpProvider,
        bevy::tasks::TaskPool,
    >::default());

    /// Insert your desired runtime pool into the app wrapped in EventworkRuntime
    app.insert_resource(EventworkRuntime(
        TaskPoolBuilder::new().num_threads(2).build(),
    ));

    /// Register any messages to be heard
    ///
    /// Now whenever a client sends a `WhisperMessage` the server will generate an event of
    /// `NetworkData<WhisperMessage>` which your application can then handle
    app.listen_for_message::<WhisperMessage, TcpProvider>();
}
  1. 监听该类型的事件。
fn handle_incoming_whisper_messages(
    mut whisper_messages: EventReader<NetworkMessage<WhisperMessage>>,
) {
    for whisper_message in whisper_messages.iter() {
        // Handle the whisper
    }
}

请求/响应

从版本 0.7.1 开始,现在可以使用事件工作自动处理请求/响应风格的消息!有关更多信息,请参阅文档

Bevy版本兼容性

只需选择与您的 bevy 版本兼容的版本。

Bevy Eventwork Bevy
0.9 0.14
0.8 0.13
0.7 0.8

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

支持的平台

  • Linux
  • Windows
  • WASM(使用与 Wasm 兼容的传输提供者,如 BEMW

上述三个平台是官方支持的。 MacOS 应该可以工作,但我没有 Mac 进行测试。如果您有 Mac,并希望测试它并反馈,请告诉我!

路线图

  • 一般代码清理、测试和文档工作
  • 消息宽事件管道
    • 用于将连接 ID 映射到用户提供的 ID 的非常有用。
  • 消息类型映射
    • 目前,每个方法发送的消息类型都是字符串,如果能只发送几个字节就更好了。
  • RPCs!

使用bevy_eventwork的包

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

名称 版本
- -

bevy_eventwork 的传输提供者

名称 版本
eventwork_tcp(包含) 0.9
bevy_eventwork_mod_websockets (链接) 0.2

贡献

要贡献,只需分叉存储库并发送 PR。

如果您有任何问题、建议,或者我不够快地处理您的 PR 并且您需要有人(当然是有礼貌的)责备,请随时在我的 bevy discord 上与我联系 @SirCarter#8209

依赖项

~35–72MB
~1M SLoC