1
0

axum_stress.rs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. use axum::{extract::ws::WebSocketUpgrade, response::Html, routing::get, Router};
  2. use dioxus::prelude::*;
  3. fn app() -> Element {
  4. let mut state = use_signal(|| 0);
  5. use_future(move || async move {
  6. loop {
  7. state += 1;
  8. tokio::time::sleep(std::time::Duration::from_millis(1)).await;
  9. }
  10. });
  11. rsx! {
  12. for _ in 0..10000 {
  13. div {
  14. "hello axum! {state}"
  15. }
  16. }
  17. }
  18. }
  19. #[tokio::main]
  20. async fn main() {
  21. pretty_env_logger::init();
  22. let addr: std::net::SocketAddr = ([127, 0, 0, 1], 3030).into();
  23. let view = dioxus_liveview::LiveViewPool::new();
  24. let app = Router::new()
  25. .route(
  26. "/",
  27. get(move || async move {
  28. Html(format!(
  29. r#"
  30. <!DOCTYPE html>
  31. <html>
  32. <head> <title>Dioxus LiveView with axum</title> </head>
  33. <body> <div id="main"></div> </body>
  34. {glue}
  35. </html>
  36. "#,
  37. glue = dioxus_liveview::interpreter_glue(&format!("ws://{addr}/ws"))
  38. ))
  39. }),
  40. )
  41. .route(
  42. "/ws",
  43. get(move |ws: WebSocketUpgrade| async move {
  44. ws.on_upgrade(move |socket| async move {
  45. _ = view.launch(dioxus_liveview::axum_socket(socket), app).await;
  46. })
  47. }),
  48. );
  49. println!("Listening on http://{addr}");
  50. let listener = tokio::net::TcpListener::bind(&addr).await.unwrap();
  51. axum::serve(listener, app.into_make_service())
  52. .await
  53. .unwrap();
  54. }