3 个版本

0.1.2 2024年4月7日
0.1.1 2024年1月2日
0.1.0 2021年12月5日

#25 in #trillium

MIT/Apache

68KB
1K SLoC

欢迎来到 Trillium!

📖 指南 📖

该指南提供了架构概述和 trillium 库之间的连接。

📑 Rustdocs 📑

rustdocs 代表了解 trillium 任何单独的库和特定接口的最好方式。




法律

许可协议为以下之一

任选其一。

除非您明确声明,否则根据 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