axum_stress.rs 1.6 KB

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