Rust 超级流媒体功能

Rust 超级流媒体功能,rust,streaming,hyper,Rust,Streaming,Hyper,我目前正试图通过rust with hyper(0.13)中的一个简单HTTP get请求来实现数据流。这个想法很简单。如果客户机发送一个请求,服务器每5秒“分块”响应一次,使连接始终保持打开状态 我正在尝试实现来自futures板条箱的特征流 impl Stream for MonitorString { type Item = Result<String, serde_json::Error>; fn poll_next(self: Pin<&mu

我目前正试图通过rust with hyper(0.13)中的一个简单HTTP get请求来实现数据流。这个想法很简单。如果客户机发送一个请求,服务器每5秒“分块”响应一次,使连接始终保持打开状态

我正在尝试实现来自futures板条箱的特征流

impl Stream for MonitorString {
    type Item = Result<String, serde_json::Error>;

    fn poll_next(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Option<Result<String, serde_json::Error>>> {
        thread::sleep(Duration::from_secs(5)); 

        Poll::Ready(Some(self.data.to_string()))
    }
}
MonitorString的impl流{ 类型项=结果;
fn poll_next(自已:PIN,Y-CX:MUT上下文,可能不相关,如:<代码>线程::睡眠内<代码>流:POLLYNEXT/<代码>未来::投票。一个非异步函数,如
Stream::poll\u next
?实际上我在没有睡眠的情况下测试了我的示例,流部分似乎可以工作:)现在只需弄清楚如何使用某种延迟手动
实现确实相当复杂,您可能需要使用它。否则您需要存储
延迟
未来,轮询直到它准备好,然后重置。
type StreamingServiceResult = Result<Response<Body>, Box<dyn std::error::Error + Sync + Send>>;

pub async fn handle_request(_: Request<Body>, params: Params, _: Query) -> StreamingServiceResult {
     Ok(Response::builder()
        .header(hyper::header::CONTENT_TYPE, "application/json")
        .header(hyper::header::ACCESS_CONTROL_ALLOW_ORIGIN, "*")
        .header(hyper::header::TRANSFER_ENCODING, "chunked")
        .body(Body::wrap_stream(MonitorString::new(...)))
}