我有一个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;
}
}
// do more stuff with the TCP stream
let mut stream = stream.into_inner();
...
Ok(HttpResponse::Ok().streaming(receiver))
它可以工作,但我想知道它是否可以改进,因为我找不到更好的解决方案,不需要使用以及为每次读取mpsc::channel
分配一个新的buffer
and (除了web::Bytes
事实上我需要指定一个任意的BUFF_SIZE
)。