Rust 超级流媒体功能
我目前正试图通过rust with hyper(0.13)中的一个简单HTTP get请求来实现数据流。这个想法很简单。如果客户机发送一个请求,服务器每5秒“分块”响应一次,使连接始终保持打开状态 我正在尝试实现来自futures板条箱的特征流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
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(...)))
}