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