У меня есть 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
и web::Bytes
для каждого чтения (помимо того, что мне нужно указать произвольное BUFF_SIZE
).