From 8be5a692a77b48446fca9199d850af60d8a679af Mon Sep 17 00:00:00 2001 From: MeexReay Date: Thu, 29 Aug 2024 06:00:53 +0300 Subject: [PATCH] no mutable refs in http server --- examples/parallel_sites.rs | 4 ++-- examples/simple_site.rs | 4 ++-- src/ezhttp/handler.rs | 36 +++++++++++++----------------------- src/ezhttp/mod.rs | 31 ++++++++++++------------------- src/main.rs | 4 ++-- 5 files changed, 31 insertions(+), 48 deletions(-) diff --git a/examples/parallel_sites.rs b/examples/parallel_sites.rs index 28036fe..ea39568 100644 --- a/examples/parallel_sites.rs +++ b/examples/parallel_sites.rs @@ -31,11 +31,11 @@ impl HttpServer for EzSite { } } - async fn on_start(&mut self, _: &str) { + async fn on_start(&self, _: &str) { // println!("Http server started on {}", host); } - async fn on_close(&mut self) { + async fn on_close(&self) { // println!("Http server closed"); } } diff --git a/examples/simple_site.rs b/examples/simple_site.rs index 3714487..a3531b8 100644 --- a/examples/simple_site.rs +++ b/examples/simple_site.rs @@ -54,11 +54,11 @@ impl HttpServer for EzSite { } } - async fn on_start(&mut self, host: &str) { + async fn on_start(&self, host: &str) { println!("Http server started on {}", host); } - async fn on_close(&mut self) { + async fn on_close(&self) { println!("Http server closed"); } } diff --git a/src/ezhttp/handler.rs b/src/ezhttp/handler.rs index d012b8b..9a5db73 100644 --- a/src/ezhttp/handler.rs +++ b/src/ezhttp/handler.rs @@ -1,18 +1,18 @@ use super::{HttpRequest, HttpServer, Stream}; use std::{future::Future, pin::Pin, sync::Arc}; -use tokio::{net::TcpStream, sync::RwLock}; +use tokio::net::TcpStream; use tokio_io_timeout::TimeoutStream; #[cfg(feature = "http_rrs")] use {super::read_line_lf, std::net::{ToSocketAddrs, SocketAddr}}; -pub type Handler = Box>, TimeoutStream) -> Pin + Send>> + Send + Sync>; +pub type Handler = Box, TimeoutStream) -> Pin + Send>> + Send + Sync>; /// Default connection handler /// Turns input to request and response to output pub async fn handler_connection( - server: Arc>, + server: Arc, mut sock: Stream ) { let Ok(addr) = sock.get_ref().peer_addr() else { return; }; @@ -20,27 +20,22 @@ pub async fn handler_connection( let req = match HttpRequest::read(sock.get_mut(), &addr).await { Ok(i) => i, Err(e) => { - server.write().await.on_error(e).await; + server.on_error(e).await; return; } }; - let resp = match server.read().await.on_request(&req).await { + let resp = match server.on_request(&req).await { Some(i) => i, None => { - match server.write().await.on_request_mut(&req).await { - Some(i) => i, - None => { - return; - } - } + return; } }; match resp.write(sock.get_mut()).await { Ok(_) => {}, Err(e) => { - server.write().await.on_error(e).await; + server.on_error(e).await; return; }, } @@ -56,13 +51,13 @@ macro_rules! pin_handler { #[cfg(feature = "http_rrs")] /// HTTP_RRS handler pub async fn handler_http_rrs( - server: Arc>, + server: Arc, mut sock: Stream, ) { let addr = match read_line_lf(sock.get_mut()).await { Ok(i) => i, Err(e) => { - server.write().await.on_error(e).await; + server.on_error(e).await; return; } } @@ -73,27 +68,22 @@ pub async fn handler_http_rrs( let req = match HttpRequest::read(sock.get_mut(), &addr).await { Ok(i) => i, Err(e) => { - server.write().await.on_error(e).await; + server.on_error(e).await; return; } }; - let resp = match server.read().await.on_request(&req).await { + let resp = match server.on_request(&req).await { Some(i) => i, None => { - match server.write().await.on_request_mut(&req).await { - Some(i) => i, - None => { - return; - } - } + return; } }; match resp.write(sock.get_mut()).await { Ok(_) => {}, Err(e) => { - server.write().await.on_error(e).await; + server.on_error(e).await; return; }, } diff --git a/src/ezhttp/mod.rs b/src/ezhttp/mod.rs index 9d5e268..97cab8f 100644 --- a/src/ezhttp/mod.rs +++ b/src/ezhttp/mod.rs @@ -10,7 +10,6 @@ use std::{ use tokio::io::AsyncReadExt; use rusty_pool::ThreadPool; use tokio::net::{TcpListener, TcpStream}; -use tokio::sync::RwLock; use tokio_io_timeout::TimeoutStream; pub mod error; @@ -63,20 +62,14 @@ pub type Stream = TimeoutStream; /// Async http server trait pub trait HttpServer { - fn on_start(&mut self, host: &str) -> impl Future + Send; - fn on_close(&mut self) -> impl Future + Send; + fn on_start(&self, host: &str) -> impl Future + Send; + fn on_close(&self) -> impl Future + Send; fn on_request( &self, req: &HttpRequest, ) -> impl Future> + Send; - fn on_request_mut( - &mut self, - _: &HttpRequest, - ) -> impl Future> + Send { - async { None } - } fn on_error( - &mut self, + &self, _: HttpError ) -> impl Future + Send { async {} @@ -95,12 +88,12 @@ where T: HttpServer + Send + 'static, { let threadpool = ThreadPool::new(threads, threads * 10, Duration::from_secs(60)); - let server = Arc::new(RwLock::new(server)); + let server = Arc::new(server); let listener = TcpListener::bind(host).await?; let host_clone = String::from(host).clone(); let server_clone = server.clone(); - server_clone.write().await.on_start(&host_clone).await; + server_clone.on_start(&host_clone).await; while running.load(Ordering::Acquire) { let Ok((sock, _)) = listener.accept().await else { continue; }; @@ -116,7 +109,7 @@ where threadpool.join(); - server.write().await.on_close().await; + server.on_close().await; Ok(()) } @@ -131,12 +124,12 @@ async fn start_server_new_thread( where T: HttpServer + Send + 'static, { - let server = Arc::new(RwLock::new(server)); + let server = Arc::new(server); let listener = TcpListener::bind(host).await?; let host_clone = String::from(host).clone(); let server_clone = server.clone(); - server_clone.write().await.on_start(&host_clone).await; + server_clone.on_start(&host_clone).await; while running.load(Ordering::Acquire) { let Ok((sock, _)) = listener.accept().await else { continue; }; @@ -150,7 +143,7 @@ where tokio::spawn((&handler)(now_server, sock)); } - server.write().await.on_close().await; + server.on_close().await; Ok(()) } @@ -165,12 +158,12 @@ async fn start_server_sync( where T: HttpServer + Send + 'static, { - let server = Arc::new(RwLock::new(server)); + let server = Arc::new(server); let listener = TcpListener::bind(host).await?; let host_clone = String::from(host).clone(); let server_clone = server.clone(); - server_clone.write().await.on_start(&host_clone).await; + server_clone.on_start(&host_clone).await; while running.load(Ordering::Acquire) { let Ok((sock, _)) = listener.accept().await else { continue; }; @@ -184,7 +177,7 @@ where handler(now_server, sock).await; } - server.write().await.on_close().await; + server.on_close().await; Ok(()) } diff --git a/src/main.rs b/src/main.rs index 538ceaf..00c416c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -28,11 +28,11 @@ impl HttpServer for EzSite { } } - async fn on_start(&mut self, host: &str) { + async fn on_start(&self, host: &str) { println!("Http server started on {}", host); } - async fn on_close(&mut self) { + async fn on_close(&self) { println!("Http server closed"); } }