3

我有一个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分配一个新的bufferand (除了web::Bytes事实上我需要指定一个任意的BUFF_SIZE)。

4

0 回答 0