use axum::{extract::ws::WebSocketUpgrade, response::Html, routing::get, Router}; use dioxus::prelude::*; fn app(cx: Scope) -> Element { let state = use_state(cx, || 0); use_future(cx, (), |_| { to_owned![state]; async move { loop { state += 1; tokio::time::sleep(std::time::Duration::from_millis(1)).await; } } }); cx.render(rsx! { for _ in 0..10000 { div { "hello axum! {state}" } } }) } #[tokio::main] async fn main() { pretty_env_logger::init(); let addr: std::net::SocketAddr = ([127, 0, 0, 1], 3030).into(); let view = dioxus_liveview::LiveViewPool::new(); let app = Router::new() .route( "/", get(move || async move { Html(format!( r#" Dioxus LiveView with axum
{glue} "#, glue = dioxus_liveview::interpreter_glue(&format!("ws://{addr}/ws")) )) }), ) .route( "/ws", get(move |ws: WebSocketUpgrade| async move { ws.on_upgrade(move |socket| async move { _ = view.launch(dioxus_liveview::axum_socket(socket), app).await; }) }), ); println!("Listening on http://{addr}"); axum::Server::bind(&addr.to_string().parse().unwrap()) .serve(app.into_make_service()) .await .unwrap(); }