Rust中的smol使用实例分析
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,本文小编为大家详细介绍"Rust中的smol使用实例分析",内容详细,步骤清晰,细节处理妥当,希望这篇"Rust中的smol使用实例分析"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习
千家信息网最后更新 2025年02月03日Rust中的smol使用实例分析smol 是一个轻量而高效的异步runtime。它采用了对标准库进行扩展的方式,整个runtime只有大约1500行代码。作者stjepang大神是大名鼎鼎crossbeam的作者。而他之前参与tokio和async-std的开发的经验和思考,产生出了从头开始构建的smol这个库。实际上在达到和tokio以及async-std相似的性能的前提下,smol代码短线精悍,完全没有依赖mio库,API更加简单,并且没有unsafe代码!而且,它还兼容tokio和async-std。让我们看个简单的例子 首先是一个echo服务器端 smol具有非常好的兼容性,比如说可以兼容tokio和async-std
本文小编为大家详细介绍"Rust中的smol使用实例分析",内容详细,步骤清晰,细节处理妥当,希望这篇"Rust中的smol使用实例分析"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
简介
Tcp服务器端和客户端
use std::net::{TcpListener, TcpStream};
use futures::io;
use smol::{Async, Task};
/// 原封不动返回输入流
async fn echo(stream: Async
) -> io::Result<()> { io::copy(&stream, &mut &stream).await?;
Ok(())
}
fn main() -> io::Result<()> {
smol::run(async {
// 创建listener
let listener = Async::
::bind("127.0.0.1:7000")?; println!("Listening on {}", listener.get_ref().local_addr()?);
println!("Now start a TCP client.");
// 接受客户端请求
loop {
let (stream, peer_addr) = listener.accept().await?;
println!("Accepted client: {}", peer_addr);
// 起一个task回应客户端
Task::spawn(echo(stream)).unwrap().detach();
}
})
}
然后是一个客户端
use std::net::TcpStream;
use futures::io;
use futures::prelude::*;
use smol::Async;
fn main() -> io::Result<()> {
smol::run(async {
// 包装出异步的标准输入/输出
let stdin = smol::reader(std::io::stdin());
let mut stdout = smol::writer(std::io::stdout());
// 连接服务器端
let stream = Async::
::connect("127.0.0.1:7000").await?; println!("Connected to {}", stream.get_ref().peer_addr()?);
println!("Type a message and hit enter!\n");
// stdin -> 服务器;服务器返回 -> stdout
future::try_join(
io::copy(stdin, &mut &stream),
io::copy(&stream, &mut stdout),
)
.await?;
Ok(())
})
}
兼容性
use std::time::{Duration, Instant};
use anyhow::{Error, Result};
fn main() -> Result<()> {
smol::run(async {
// 使用async-std的sleep
let start = Instant::now();
println!("Sleeping using async-std...");
async_std::task::sleep(Duration::from_secs(1)).await;
println!("Woke up after {:?}", start.elapsed());
// 使用tokio的sleep
let start = Instant::now();
println!("Sleeping using tokio...");
tokio::time::delay_for(Duration::from_secs(1)).await;
println!("Woke up after {:?}", start.elapsed());
Ok(())
})
}
注意,兼容tokio需要开启以下feature
[dependencies]smol = { version = "0.1", features = ["tokio02"] }
读到这里,这篇"Rust中的smol使用实例分析"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
服务器
服务
客户
客户端
实例
实例分析
分析
代码
文章
作者
兼容性
内容
标准
输入
妥当
相似
精悍
原封不动
大名鼎鼎
从头
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发网课网站
便携式服务器
银川办公软件开发报价多少
oracle数据库编辑器
陇南定制软件开发
如何与主机服务器通信
澳大利亚中国网络技术
国电南瑞软件开发收入
军方网络安全专家
软件开发关于扫描枪设备检测
迷你服务器出问题怎么解决
少先队网络安全周
工控领域网络安全标准
软件技术好学还是网络技术好学
数据库审计信息安全
网络安全法六个重要事项图片
中时通软件开发
mcgs实时数据库太多
网络安全注意问题有哪些
信通公司开展网络安全培训
eslipse中如何建立数据库
服务器远程如何进安全模式
什么服务器可以覆盖城镇
互联网科技服务业发展
山东省瑞希互联网科技有限公司
数据库字段的数据说明怎么设置
正泰网络技术与正泰电器
乌海十中开展网络安全宣传周活动
南宁广告设计软件开发
jsp怎么直接显示数据库