1 个不稳定版本
0.0.1 | 2023年2月20日 |
---|
在 #user-management 中排名 #20
16KB
165 行
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