[][src]Crate tokio_global

Provides you with global tokio runtimes

It can be used from any point in code without need to manually pass around runtime itself Or being forced to use tokio macros

Example

use tokio_global::{Runtime, AutoRuntime};
use tokio::io::{AsyncWriteExt, AsyncReadExt};

async fn server() {
    let mut listener = tokio::net::TcpListener::bind("127.0.0.1:8080").await.expect("To bind");

    let (mut socket, _) = listener.accept().await.expect("To accept connection");

    async move {
        let mut buf = [0; 1024];
        loop {
            match socket.read(&mut buf).await {
                // socket closed
                Ok(0) => return,
                Ok(_) => continue,
                Err(_) => panic!("Error :("),
            };
        }
    }.spawn().await.expect("Finish listening");
}

async fn client() {
    let mut stream = tokio::net::TcpStream::connect("127.0.0.1:8080").await.expect("Connect");

    // Write some data.
    stream.write_all(b"hello world!").await.expect("Write");

    //Stop runtime
    Runtime::stop();
}

let _guard = Runtime::default();

let runner = std::thread::spawn(|| {
    Runtime::run();
});

server().spawn();
client().spawn();

Re-exports

pub extern crate tokio;

Structs

Runtime

Tokio runtime guard

Traits

AutoRuntime

Trait to bootstrap your futures.