Files
markbase/docs/russh_analysis/SUMMARY.md
Warren 1300a4e223
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
MarkBase架构升级:Multi-Volume Virtual Tree + Dual-View Management + Git Remote修正
核心功能:
-  Categories/Series双视图管理(category_view.rs + import_markdown.rs)
-  FUSE Multi-Volume支持(tree_type参数)
-  SSH/SFTP/SCP/rsync协议完整实现(4042行)
-  NFS/SMB Module Phase 1-3完成
-  Archive Module Phase 1-4完成(2916行)
-  Download Center API完整实现
-  S3兼容API实现(560行)

Git配置修正:
-  删除错误origin(gitea.momentry.ddns.net)
-  删除m5max128(指向机器名)
-  设置origin = m5max128gitea.momentry.ddns.net/admin/markbase
-  设置m4minigitea = m4minigitea.momentry.ddns.net/warren/markbase

数据清理:
-  删除38个临时SQLite(保留accusys.sqlite、demo.sqlite)
-  删除.bak、test_*.bin、调试脚本等临时文件
-  删除临时目录(build/、download files/、raid_test/等)
-  更新.gitignore排除临时文件

架构优化:
- 52个文件修改,2434行新增,4739行删除
- Workspace成员整合(16个crate)
- 数据库状态:accusys.sqlite保留(主demo测试)

远程同步:
-  准备推送到m5max128gitea(远程Gitea)
-  准备推送到m4minigitea(本地Gitea)
2026-06-12 12:59:54 +08:00

2.4 KiB
Raw Blame History

russh v0.61.2 API限制分析总结

分析完成: 2026-06-09
分析结论: russh支持rsync Sender模式但Receiver模式存在技术障碍


核心发现

已支持的能力

  1. channel.data()存在 - Sender模式完全可用
  2. 异步发送支持 - tokio生态完整集成
  3. into_stream()双向流 - 理论上支持Receiver模式
  4. Message type区分 - ChannelMsg完整枚举
  5. 控制消息分离 - ChannelRx自动过滤

⚠️ 存在的限制

  1. channel.read()缺失 - 无直接读取API
  2. Channel所有权消耗 - into_stream()消耗所有权
  3. 无法并发读写 - 需要split()或wait()循环
  4. 无Multiplexing protocol - 不支持SSH ControlMaster
  5. rsync protocol未标准化 - 需逆向分析OpenSSH

技术障碍评级

障碍 级别 解决方案
channel.read()缺失 HIGH 使用into_stream()
rsync protocol未标准化 HIGH 参考OpenSSH源码
双向交互复杂性 HIGH 需完整状态机
Channel所有权消耗 MEDIUM 提前规划逻辑
Window size管理 LOW 自动管理

实施建议优先级

  1. SFTP替代 (立即实施,已实现)
  2. 调用rsync命令 短期1-2天
  3. 简化rsync协议 中期1-2周
  4. 完整rsync实现 长期2-4周

关键代码路径

Sender模式已实现

channel.data(&file_data).await?;
channel.exit_status(0).await?;

Receiver模式理论

let stream = channel.into_stream();  // ← 双向流
stream.read(&mut buf).await?;        // ← AsyncRead
stream.write_all(b"ACK").await?;     // ← AsyncWrite

SFTP子系统最佳实践

let stream = channel.into_stream();
russh_sftp::server::run(stream, handler).await;

参考文档

  1. API_LIMITATIONS.md - 完整技术分析60页
  2. IMPLEMENTATION_GUIDE.md - 实施指南20页
  3. OpenSSH源码 - sftp-server.crsync protocol实现

下一步行动

  1. 测试现有SFTP功能优先
  2. ⚠️ 评估rsync命令调用方案次选
  3. ⚠️ 研究OpenSSH源码长期
  4. ⚠️ 提交技术报告给团队

报告作者: Claude
报告日期: 2026-06-09
文档版本: 1.0