3 个版本
0.1.2 | 2024年4月7日 |
---|---|
0.1.1 | 2024年1月2日 |
0.1.0 | 2021年12月5日 |
#25 in #trillium
68KB
1K SLoC
欢迎来到 Trillium!
📖 指南 📖
该指南提供了架构概述和 trillium 库之间的连接。
📑 Rustdocs 📑
rustdocs 代表了解 trillium 任何单独的库和特定接口的最好方式。
法律
许可协议为以下之一
- Apache 许可协议第 2 版 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可协议 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在作品中的任何贡献,均应如上双许可,而不附加任何其他条款或条件。
lib.rs
:
Trillium 服务器端发送事件的工具
这主要提供 SseConnExt
,这是一个扩展特质,用于 trillium::Conn
,它有一个可链式方法 with_sse_stream
,该方法接收一个 Stream
,其中 Item
实现 Eventable
。
通常,您希望这个流类似于一个通道,但具体细节取决于您应用程序的事件扇出特性。
此存储库实现了 Eventable
对于您应用程序中可用的 Event
类型,以及对于 String
和 &'static str
。您还可以为您的应用程序中的任何类型实现 Eventable
。
示例用法
use broadcaster::BroadcastChannel;
use trillium::{conn_try, conn_unwrap, log_error, Conn, Method, State};
use trillium_sse::SseConnExt;
use trillium_static_compiled::static_compiled;
type Channel = BroadcastChannel<String>;
fn get_sse(mut conn: Conn) -> Conn {
let broadcaster = conn_unwrap!(conn.take_state::<Channel>(), conn);
conn.with_sse_stream(broadcaster)
}
async fn post_broadcast(mut conn: Conn) -> Conn {
let broadcaster = conn_unwrap!(conn.take_state::<Channel>(), conn);
let body = conn_try!(conn.request_body_string().await, conn);
log_error!(broadcaster.send(&body).await);
conn.ok("sent")
}
fn main() {
let handler = (
static_compiled!("examples/static").with_index_file("index.html"),
State::new(Channel::new()),
|conn: Conn| async move {
match (conn.method(), conn.path()) {
(Method::Get, "/sse") => get_sse(conn),
(Method::Post, "/broadcast") => post_broadcast(conn).await,
_ => conn,
}
},
);
// trillium_smol::run(handler);
}
依赖关系
~7MB
~187K SLoC