2

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

当客户端上传文件时,数据正在从 a 读取tokio::net::TcpStream并写入 a futures_fs::FsWriteSink,它已在单独的futures_fs::FsPool.

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

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

4

2 回答 2

0

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

// 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();
于 2018-11-21T15:04:20.737 回答
0

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

但是,一个新的blockingAPI 现在可以在tokio. 它允许使用内部线程机制执行阻塞或 CPU 繁重的操作。

于 2018-11-22T20:56:13.497 回答