tokio_based

Crates.iotokio_based
lib.rstokio_based
version2.0.0
sourcesrc
created_at2024-04-29 13:39:35.363723
updated_at2024-05-01 09:46:43.20829
descriptionBASED Async Single-threaded Execution Dispatcher
homepage
repositoryhttps://github.com/JoNil/tokio_based
max_upload_size
id1224181
size15,569
Jonathan Nilsson (JoNil)

documentation

https://docs.rs/tokio_based

README

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 }
    }
}

Commit count: 8

cargo fmt