如何在Rust中异步计算硬盘上文件的校验和?

时间:2018-11-21 13:17:12

标签: file asynchronous rust checksum rust-tokio

我在Rust / Tokio堆栈中有一个TCP文件服务器。

当客户端上传文件时,正在从tokio::net::TcpStream读取数据并将其写入futures_fs::FsWriteSink,该数据已在单独的futures_fs::FsPool上启动。

文件完全上传后,我需要通过对照客户端发送的校验和来检查其一致性。

异步计算校验和的最简单方法是什么,尤其是在文件不适合RAM的情况下?

2 个答案:

答案 0 :(得分:0)

这取决于您要使用哪种校验和算法,但是以md5 crate为例,您可以即时计算校验和。这样的事情应该做到:

// When starting the file transfer
let mut md5_context = md5::Context::new();

// ...

// as part of your existing processing for each block of data
md5_context.consume (&block);

// ...

// once the last block has been processed
return md5_context.compute();

答案 1 :(得分:0)

实际上,在这种情况下,只要一次MD5计算花费的时间少于1 us(约500 ns),使简单的哈希算法异步就显得有些多余。

但是,blocking中现在提供了新的tokio API。它允许使用内部线程机制执行阻塞或CPU繁重的操作。