Crates.io | tokio_based |
lib.rs | tokio_based |
version | 2.0.0 |
source | src |
created_at | 2024-04-29 13:39:35.363723 |
updated_at | 2024-05-01 09:46:43.20829 |
description | BASED Async Single-threaded Execution Dispatcher |
homepage | |
repository | https://github.com/JoNil/tokio_based |
max_upload_size | |
id | 1224181 |
size | 15,569 |
BASED: BASED Async Single-threaded Execution Dispatcher
The purpose of tokio_based is to allow you to easily spin up a single threaded tokio runtime. That will be shut down and all tasks dropped when the join handle is dropped.
struct ExampleServer {
join_handle: tokio_based::JoinHandle,
}
impl ExampleServer {
fn new() -> ExampleServer {
let join_handle = tokio_based::spawn(|run| async move {
let listener = TcpListener::bind("127.0.0.1:8080").await.unwrap();
while run.load(Ordering::SeqCst) {
let (mut socket, _) = listener.accept().await.unwrap();
tokio::spawn({
let run = run.clone();
async move {
let mut buf = [0; 1024];
// In a loop, read data from the socket and write the data back.
while run.load(Ordering::SeqCst) {
let n = match socket.read(&mut buf).await {
// socket closed
Ok(0) => return,
Ok(n) => n,
Err(e) => {
eprintln!("failed to read from socket; err = {:?}", e);
return;
}
};
// Write the data back
if let Err(e) = socket.write_all(&buf[0..n]).await {
eprintln!("failed to write to socket; err = {:?}", e);
return;
}
}
}
});
}
});
ExampleServer { join_handle }
}
}