我有一个TcpStream,我需要从中读取N
字节并将其作为HttpResponse发送(以后我仍然需要使用该流)。目前,我正在使用以下代码:
use futures::channel::mpsc;
use actix_web::HttpResponse;
use tokio::net::TcpStream;
let stream: TcpStream = ...;
let mut stream = stream.take(N);
let (mut sender, receiver) = mpsc::unbounded();
loop {
let mut buffer = vec![0; BUFF_SIZE];
let n = stream.read(&mut buffer).await?;
if n > 0 {
buffer.truncate(n);
let data = Ok(web::Bytes::from(buffer));
sender.send(data).await?;
} else {
break;
}
}
Ok(HttpResponse::Ok().streaming(receiver))
它可以工作,但是我想知道是否可以改进,因为我找不到更好的解决方案,不需要使用mpsc::channel
以及分配新的[C0 ]和buffer
用于每次读取(除了我需要指定任意web::Bytes
的事实)。
您可以通过直接将BUFF_SIZE
转换为TcpStream
而无需通过mpsc通道来简化实现: