简介
smol是一个轻量而高效的异步runtime。它采用了对标准库进行扩展的方式,整个runtime只有大约1500行代码。作者stjepang大神是大名鼎鼎crossbeam的作者。而他之前参与tokio和async-std的开发的经验和思考,产生出了从头开始构建的smol这个库。实际上在达到和tokio以及async-std相似的性能的前提下,smol代码短线精悍,完全没有依赖mio库,API更加简单,并且没有unsafe代码!而且,它还兼容tokio和async-std。让我们看个简单的例子
Tcp服务器端和客户端
首先是一个echo服务器端
use std::net::{TcpListener, TcpStream};
use futures::io;
use smol::{Async, Task};
/// 原封不动返回输入流
async fn echo(stream: Async<TcpStream>) -> io::Result<()> {
io::copy(&stream, &mut &stream).await?;
Ok(())
}
fn main() -> io::Result<()> {
smol::run(async {
// 创建listener
let listener = Async::<TcpListener>::bind("127.0.0.1:7000")?;
println!("Listening on {}", listener.get_r