#tags #channel #user #user-management #sse #message

tagged-channels

使用标签标记通道和消息(WebSockets、SSE、...),然后向由特定用户打开的所有通道发送事件。

1 个不稳定版本

0.0.1 2023年2月20日

#user-management 中排名 #20

MIT 许可证

16KB
165

License Crates.io Docs.rs

tagged-channels

这个库可以轻松地将用户ID等标签标记到(WebSocket、SSE等)通道上,然后向由特定用户打开的所有通道发送事件。它是框架无关的,但目前只有一个axum 示例。如果您正在与其他框架一起使用它,请考虑提交一个修改后的示例。

使用方法


// We're going to tag channels
#[derive(Clone, Eq, Hash, PartialEq)]
enum Tag {
    UserId(i32),
    IsAdmin,
}

// Events we're going to send
#[derive(Deserialize, Serialize)]
#[serde(tag = "_type")]
enum Message {
    Ping,
}

// Create the manager
let mut manager = TaggedChannels::<Message, Tag>::new();

// Message to user#1
manager.send_by_tag(&Tag::UserId(1), Message::Ping).await;

// Message to all admins
manager.send_by_tag(&Tag::UserId(1), Message::Ping).await;

// Message to everyone
manager.broadcast(Message::Ping).await;

// Connect and tag the channel as belonging to the user#1 who is an admin
let mut channel = manager.create_channel([Tag::UserId(1), Tag::IsAdmin]);

// Receive events coming from the channel
while let Some(event) = channel.recv().await {
    // send the event through WebSocket or SSE
}

请查看完整的axum 示例以获取详细信息。

贡献

我们感谢所有类型的贡献,谢谢!

关于 README 的说明

大多数 README 文件是从 crate 文档自动复制而来的,由 cargo-sync-readme 实现。这样,README 总是与文档保持同步,并且示例经过测试。

因此,如果您想更改 <!-- cargo-sync-readme start --><!-- cargo-sync-readme end --> 标记之间的 README 的一部分,请不要直接编辑 README.md,而是更改 src/lib.rs 上的文档,然后使用以下命令同步 README:

cargo sync-readme

(确保已安装 cargo 命令)

cargo install cargo-sync-readme

如果您已安装 rusty-hook,则更改将在提交时自动应用。

许可证

本项目采用 MIT 许可证

依赖关系

~2.4–8.5MB
~57K SLoC