如何通过写入io :: Write特征来通过期货流发送数据?

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

我有一个功能,需要一个&mut io::Write,我想用它从actix-web服务器发送流响应,而不必缓冲整个响应。该功能是“推送”数据,我不能改变功能(这是这个问题的全部前提)来使用异步流或其他类型的轮询。

目前我被迫使用&mut Vec(实现io::Write)缓冲整个结果,然后发送Vec作为响应体。但是,响应可能很大,所以我宁愿在没有缓冲的情况下传输它。

是否有某种适配器可以实现io::Write,必要时会根据背压阻止写入,并且与actix-web可以用于响应的类型兼容(例如futures::Stream)?

fn generate(output: &mut io::Write) {
    // ...
}

fn request_handler() -> Result<HttpResponse> {
    thread::spawn(|| generate(/*???*/));
    Ok(HttpResponse::Ok().body(/*???*/))
}

std::sync::mpscfutures::mpsc要么两端都是异步的,要么两端都是阻塞的,所以如何将它们用作同步和异步端之间的适配器并不明显。

stream rust future
2个回答
© www.soinside.com 2019 - 2024. All rights reserved.