
rust
文章平均质量分 84
kk3909
区块链 云计算
展开
-
rust AsyncRead和Stream互相转换
文章目录Stream转换为 AsyncReadAsyncRead 转换为Stream方式一:包装一个自定义的stream方式二:使用futures_codec库方式三:使用async_stream库的try_stream!宏方式四:使用futures库提供的unfold方法Stream转换为 AsyncReadfutures = {version = “0.3” }使用futures库的TryStreamExt::into_async_read方法 let mut reader = stream原创 2021-05-10 17:38:36 · 878 阅读 · 2 评论 -
rust嵌入式key/value数据库
文章目录种类介绍sled已知问题如何使用skade/leveldb如何使用dermesser/leveldb-rs如何使用rust-rocksdb如何使用性能测试对比插入不同的长度的key/valuemonotonic insert/get/removerandom insert/get/remove种类介绍类型语言star简介sledrust4.6k嵌入式数据库,beta尚未稳定RocksDBc++19.4kfacebook开源,在LevelDB之上做了改进原创 2021-03-24 23:27:23 · 4612 阅读 · 1 评论 -
async-std BufStream实现
tokio有BufStream,async-std居然没有,来给它包一包use async_std::io::{BufWriter,BufReader};use futures::{AsyncRead,AsyncWrite};use pin_project_lite::pin_project;use std::{io, io::Error as IoError, pin::Pin, task::Context, task::Poll};pin_project! { struct Bu.原创 2020-12-07 14:04:59 · 316 阅读 · 0 评论 -
go tcp VS rust tcp socket性能测试对比
初略测试,仅供参考test 1读写分离(启动两个task/goroutine),客户端生成文件,客户端从文件中读取数据写入到服务端在服务端计算速率(收到的bytes/second)文件20g 每次发送数据4kTypeRatego Tcp574m/srust Tcp(async_std)130m/srust Tcp(tokio)174m/s文件20g 每次发送数据40kTypeRatego Tcp1775m/srust原创 2020-12-06 21:54:58 · 2567 阅读 · 0 评论 -
rust异步编程:futures-rs之futures-util
futures-util算得上是巨无霸,它整个futures-rs内容最多的一个子类库,它依赖`futures-core 、futures-task 、futures-channel、futures-io、futures-sink、futures-macro、tokio-io` 等类库。不过核心的还是这几个Trait:`FutureExt、TryFutureExt、StreamExt、TryStreamExt、SinkExt、AsyncReadExt,、AsyncWriteExt、AsyncSeekExt、原创 2020-08-23 20:57:48 · 2197 阅读 · 0 评论 -
rust异步编程:futures-rs之futures-sink
文章目录概述Sink概述futures-sink这个类库比较简单,只包含一个Sink trait,包含的发送方有ChannelsSocketsPipes除了此类“原始”sink之外,通常还可以在现有sink之上分层以添加功能,例如缓冲。从某种意义上说,可能不会立即完整发送值,因此发送到sink是“异步的”。而是以两阶段的方式发送值:首先初始化send,然后通过轮询等待完成。此两阶段设置类似于同步代码中的buffered writing,其中写入通常会立即成功完成,但是内部会被缓冲,并且实际原创 2020-08-23 20:57:12 · 739 阅读 · 0 评论 -
rust异步编程:futures-rs之futures-io
文章目录概述AsyncReadAsyncWriteAsyncSeekAsyncBufRead概述futures-io这个类库主要包含 AsyncRead, AsyncWrite, AsyncSeek,AsyncBufRead traits,对应同步标准库里的std::io::{Read, Write, Seek, BufRead},主要区别是这些trait与异步系统集成在一起。AsyncRead异步读取字节。类似std::io::Read ,poll_read不同于Read::read,当前任务会加原创 2020-08-23 20:56:38 · 534 阅读 · 0 评论 -
rust异步编程:futures-rs之futures-core
文章目录概述futurestreamtask概述futures-core包含future库的核心特征和类型目录结构如下├── future.rs├── lib.rs├── stream.rs└── task ├── __internal │ ├── atomic_waker.rs │ └── mod.rs ├── mod.rs └── poll.rs对外暴露的apifutures-core/src/lib.rspub mod futu原创 2020-08-23 20:55:38 · 768 阅读 · 0 评论 -
rust异步编程:futures-rs之futures-executor
文章目录概述block_onThreadPoolwake使用示例概述futures-executor它引用了futures-core、futures-task、futures-util,用于task的执行,主要提供以下功能:线程池 (线程和task的关系M:N )ThreadPool::spawn_ok生成其他任务(spawn task)Spawn::spawn_objLocalSpawn::spawn_local_obj (用于!Send future)单线程执行Loc原创 2020-08-22 19:27:05 · 1697 阅读 · 0 评论 -
rust异步编程:futures-rs
文章目录概述代码结构使用示例futureshttps://github.com/rust-lang/futures-rs/tree/0.3.5概述futures-rs是rust官方提供的一个类库,它是Rust异步编程的基础。包括关键特征的定义如Stream,以及宏如join!, select!以及各种future组合方法用来控制异步流程。futures-rs 中定义的 future 类型是标准库中 future 的原始实现。Rust 将核心的 Future trait 移入标准库中并改为 std原创 2020-08-22 19:16:18 · 2199 阅读 · 0 评论 -
rust异步编程:官方标准库
文章目录涉及的包`std::future::*``std::poll::*` 和`std::wake::* `FutureContextWakerRawWakerRawWakerVTablePollReadyPendingIntoFuturefrom_generator标准库代码位于https://github.com/rust-lang/rust/tree/master/library这里使用目前最新版本1.45.2涉及的包std::future::*对应src/libstd/future.原创 2020-08-21 22:30:09 · 1359 阅读 · 0 评论 -
rust异步编程:生成器
文章目录概述标准库和闭包的关系生成的代码究竟是啥样?标准库代码位于https://github.com/rust-lang/rust/tree/master/library这里使用目前最新版本1.45.2概述生成器是rust协程(异步编程)实现的基础,async代码最终会编译成一个生成器,一个生成器就是一个可恢复函数,生成器和闭包比较相似,但在编译器中会将生成器编译成截然不同的语义。生成器最大的特点就是,程序的执行流程可以在生成器和调用者之间来回切换。当我们需要暂时从生成器中返回的时候,就使用y原创 2020-08-21 22:29:23 · 2018 阅读 · 0 评论 -
github rust 项目Travis ci配置
文章目录复制github仓库rust fmt使用安装运行配置宏使用与Travis ci集成rust clippy使用类别(组)安装运行配置宏使用与Travis ci集成travis-ci简介.travis.yml集成步骤复制github仓库# clone要复制的仓库git clone --bare https://github.com/nervosnetwork/tentacle.gitcd tentacle.git# 提前在github上创建新的项目仓库git push --mirror ht原创 2020-07-22 00:06:07 · 915 阅读 · 0 评论 -
Rust 数据库框架SQLx使用
文章目录简介添加依赖async-stdtokio创建表创建连接或连接池连接池单个连接插入记录更新记录查询记录简介SQLx是一个rust异步数据库框架,不同于diesel这类支持orm框架,没有DSL,用户自己编写sql语句,将查询结果映射到struct上。支持 async-std 和 tokio支持 postgresql 、mysql/maridb、sqlitemysql和postgresql 是纯rust实现的驱动程序(sqlite使用了 libsqlite3 C 库)支持TLS嵌套事务原创 2020-07-09 23:06:50 · 9365 阅读 · 0 评论 -
Rust Web框架warp使用
目录简介快速开始Request和Response从path和body中获取参数从query中获取参数、设置状态码静态文件、目录websocket重定向tls简介warp是一个超级便捷、可组合、速度极快的异步Web框架。目前最新版本为v0.2.3,尚未稳定。内部主要基于hyper框架实现,同一个作者,而hyper主要基于tokio。因此hyper的大部分特性都可以在warp中得到了继承:HTTP/1HTTP/2Asynchronouswarp的基本组成部分是filter,他们可以通过组合满足各原创 2020-07-09 12:56:33 · 8868 阅读 · 0 评论 -
Rust Web框架Tide使用
目录简介快速开始发送和接收数据json数据静态文件重定向简介rust官方推出的基于async-std的异步web框架,目前最新版本为v0.11.0,还不太成熟。快速开始创建项目cargo new tide-demo在cargo.toml中添加依赖[dependencies]tide = "0.11.0"async-std = { version = "1.6.0", features = ["attributes"]修改main.js#[async_std::main]原创 2020-07-08 16:49:45 · 3739 阅读 · 0 评论 -
rust指针、引用、智能指针
文章目录指针引用可变引用不可变引用悬垂引用引用&借用解引用智能指针指针指针是个通用概念,它表示内存地址这种类型,其引用或“指向”其他数据。Rust中的指针是“第一类公民”(first-class values),可以将它们移动或复制,存储到数据结构中并从函数中返回。Rust提供了多种类型的指针:引用(Reference),共享引用&,不可变引用&mut原生指针(Raw Pointer),*const和*mut智能指针(Smart Pointer),Box,Rc等引用原创 2020-06-15 15:49:19 · 6562 阅读 · 0 评论