threadpool sync and async my head is made from tin cans
This commit is contained in:
parent
9aec967306
commit
f92f3456de
17
Cargo.lock
generated
17
Cargo.lock
generated
@ -84,8 +84,10 @@ checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80"
|
|||||||
name = "ezhttp"
|
name = "ezhttp"
|
||||||
version = "0.1.6"
|
version = "0.1.6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"lazy_static",
|
||||||
"rusty_pool",
|
"rusty_pool",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
|
"threadpool",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tokio-io-timeout",
|
"tokio-io-timeout",
|
||||||
"urlencoding",
|
"urlencoding",
|
||||||
@ -198,6 +200,12 @@ version = "1.0.11"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
|
checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "lazy_static"
|
||||||
|
version = "1.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.155"
|
version = "0.2.155"
|
||||||
@ -436,6 +444,15 @@ dependencies = [
|
|||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "threadpool"
|
||||||
|
version = "1.8.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa"
|
||||||
|
dependencies = [
|
||||||
|
"num_cpus",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tokio"
|
name = "tokio"
|
||||||
version = "1.40.0"
|
version = "1.40.0"
|
||||||
|
@ -15,6 +15,8 @@ serde_json = "1.0.128"
|
|||||||
tokio = { version = "1.40.0", features = ["full"] }
|
tokio = { version = "1.40.0", features = ["full"] }
|
||||||
rusty_pool = "0.7.0"
|
rusty_pool = "0.7.0"
|
||||||
tokio-io-timeout = "1.2.0"
|
tokio-io-timeout = "1.2.0"
|
||||||
|
threadpool = "1.8.1"
|
||||||
|
lazy_static = "1.5.0"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
http_rrs = []
|
http_rrs = []
|
||||||
|
@ -39,6 +39,7 @@ pub async fn handler_connection<S: HttpServer + Send + 'static + Sync>(
|
|||||||
return;
|
return;
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
|
@ -8,9 +8,10 @@ use std::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
use tokio::io::AsyncReadExt;
|
use tokio::io::AsyncReadExt;
|
||||||
use rusty_pool::ThreadPool;
|
use threadpool::ThreadPool;
|
||||||
use tokio::net::{TcpListener, TcpStream};
|
use tokio::net::{TcpListener, TcpStream};
|
||||||
use tokio::runtime::Runtime;
|
use tokio::runtime::Runtime;
|
||||||
|
use tokio::sync::OnceCell;
|
||||||
use tokio_io_timeout::TimeoutStream;
|
use tokio_io_timeout::TimeoutStream;
|
||||||
|
|
||||||
pub mod error;
|
pub mod error;
|
||||||
@ -86,12 +87,14 @@ async fn start_server_with_threadpool<T>(
|
|||||||
running: Arc<AtomicBool>,
|
running: Arc<AtomicBool>,
|
||||||
) -> Result<(), Box<dyn Error>>
|
) -> Result<(), Box<dyn Error>>
|
||||||
where
|
where
|
||||||
T: HttpServer + Send + 'static,
|
T: HttpServer + Send + 'static + Sync,
|
||||||
{
|
{
|
||||||
let threadpool = ThreadPool::new(threads, threads * 10, Duration::from_secs(60));
|
let threadpool = ThreadPool::new(threads);
|
||||||
|
|
||||||
let server = Arc::new(server);
|
let server = Arc::new(server);
|
||||||
let listener = TcpListener::bind(host).await?;
|
let listener = TcpListener::bind(host).await?;
|
||||||
|
let handler = Arc::new(OnceCell::new_with(Some(handler)));
|
||||||
|
|
||||||
let host_clone = String::from(host).clone();
|
let host_clone = String::from(host).clone();
|
||||||
let server_clone = server.clone();
|
let server_clone = server.clone();
|
||||||
server_clone.on_start(&host_clone).await;
|
server_clone.on_start(&host_clone).await;
|
||||||
@ -105,7 +108,8 @@ where
|
|||||||
|
|
||||||
let now_server = Arc::clone(&server);
|
let now_server = Arc::clone(&server);
|
||||||
|
|
||||||
threadpool.spawn_await((&handler)(now_server, sock));
|
let handler_clone = handler.clone();
|
||||||
|
threadpool.execute(move || {Runtime::new().unwrap().block_on((&handler_clone.get().unwrap())(now_server, sock))});
|
||||||
}
|
}
|
||||||
|
|
||||||
threadpool.join();
|
threadpool.join();
|
||||||
@ -141,7 +145,7 @@ where
|
|||||||
|
|
||||||
let now_server = Arc::clone(&server);
|
let now_server = Arc::clone(&server);
|
||||||
|
|
||||||
Runtime::new().unwrap().spawn((&handler)(now_server, sock));
|
tokio::spawn((&handler)(now_server, sock));
|
||||||
}
|
}
|
||||||
|
|
||||||
server.on_close().await;
|
server.on_close().await;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user