我在Rust / Tokio堆栈中有一个TCP文件服务器。
当客户端上传文件时,正在从tokio::net::TcpStream
读取数据并将其写入futures_fs::FsWriteSink
,该数据已在单独的futures_fs::FsPool
上启动。
文件完全上传后,我需要通过对照客户端发送的校验和来检查其一致性。
异步计算校验和的最简单方法是什么,尤其是在文件不适合RAM的情况下?
答案 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繁重的操作。