如何使用actix-web HttpResponse从Tokio TcpStream发送数据

问题描述 投票:2回答:1

我有一个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的事实)。

tcp rust stream rust-tokio actix-web
1个回答
0
投票

您可以通过直接将BUFF_SIZE转换为TcpStream而无需通过mpsc通道来简化实现:

© www.soinside.com 2019 - 2024. All rights reserved.