docs.rs failed to build smux_rust-0.2.0
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
smux_rust
一个用 Rust 实现的多路复用库,参考了 xtaci/smux 的 Go 实现。
功能特性
- 多路复用:在单个底层连接上创建多个流
- 流量控制:Token bucket 和滑动窗口控制
- 内存优化:对象池减少内存分配开销
- 流量整形:轮询调度算法保证流之间的公平性
- 协议支持:支持协议版本 1 和版本 2
使用方法
基本使用
use ;
use ;
use TcpStream;
// 客户端示例
// 服务器端示例
自定义配置
use Config;
use Duration;
let config = Config ;
// 验证配置
config.verify?;
// 使用自定义配置创建会话
let session = client?;
多流使用
// 在同一个会话中打开多个流
let stream1 = session.open_stream.await?;
let stream2 = session.open_stream.await?;
let stream3 = session.open_stream.await?;
// 每个流都可以独立读写
stream1.write_all.await?;
stream2.write_all.await?;
stream3.write_all.await?;
高级功能
use ;
// 1. 获取活跃流数量
let num = session.num_streams.await;
println!;
// 2. 设置会话截止时间
session.set_deadline.await;
// 3. 设置流的读写超时
stream.set_read_deadline.await;
stream.set_write_deadline.await;
// 4. 获取流关闭通知
let die_notifier = stream.get_die_notifier;
spawn;
// 5. 检查流是否关闭
if stream.is_closed.await
// 6. 等待多个流中任意一个就绪(PollWait)
let streams = vec!;
let idx = session.poll_wait.await?;
println!;
// 7. 获取流地址
if let Some = stream.local_addr
// 8. 高效复制流数据到文件或其他 AsyncWrite
let mut file = create.await?;
let bytes_copied = stream.copy_to.await?;
println!;
协议规范
帧格式:
VERSION(1B) | CMD(1B) | LENGTH(2B) | STREAMID(4B) | DATA(LENGTH)
命令类型:
cmdSYN(0)- 流打开cmdFIN(1)- 流关闭cmdPSH(2)- 数据推送cmdNOP(3)- 无操作cmdUPD(4)- 窗口更新(仅版本 2)
流ID分配:
- 客户端使用奇数,从 1 开始
- 服务器端使用偶数,从 0 开始
依赖
bytes- 字节缓冲区处理parking_lot- 高性能互斥锁
许可证
MIT License