我有一些命令行过滤器功能,希望将其放在API后面(像grep这样的服务)。这已经可以与stdin&stdout完美配合,然后我尝试将其放在actix-web后面。
main方法具有此签名fn process<R: io::Read, W: io::Write>(formater: Box<OutputFormater>, reader: R, writer: &mut W)
。
这在stdin&stdout上可以很好地工作,无论stdin有多大,它都是逐行流式传输,并且不会占用大量内存。
到目前为止,我在actix处理程序中可以实现的最佳想法是:
fn filter(info: Query<Info>) -> impl Responder {
let csv = reqwest::get(&info.csv_uri).unwrap();
let formater = get_formater(&info.format);
let mut buffer: Vec<u8> = vec![];
process(formater, csv, &mut buffer);
let output = std::str::from_utf8(&buffer[..]).unwrap();
output.to_string()
}
是否有一种简单的方法可以流式传输到HttpResponse
?也许我必须更改在命令行中的处理方式,使其与actix / futures兼容,作为附带的好处?