Starting the Tokio event loop
In tokio, the object we need to use to manage an event loop is Core. Here's how we start an event loop using tokio (in the main module):
use tokio_core::reactor::Core;
fn main() {
let mut core = Core::new().expect("Cannot create tokio Core");
if let Err(error) = core.run(server()) {
println!("Error running the server: {}", error);
}
}We first create a new Core object, and then call the run() method to start the event loop. The latter method will return when the provided future ends. Here, we callserver()to get the future, so let's write this function:
use std::io;
use futures::prelude::async;
#[async]
fn server() -> io::Result<()> {
Ok(())
}As you can see, we use the #[async] attribute. Since attributes are currently unstable in Rust, we had to specify that we are using the proc_macro feature. We also import the async attribute from the futures_await crate (which was imported under the name futures). So don't forget the #![feature...