我有一个功能,需要一个&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::mpsc
和futures::mpsc
要么两端都是异步的,要么两端都是阻塞的,所以如何将它们用作同步和异步端之间的适配器并不明显。