Function warp::filters::sse::keep_alive
source ยท pub fn keep_alive() -> KeepAlive
Expand description
Keeps event source connection alive when no events sent over a some time.
Some proxy servers may drop HTTP connection after a some timeout of inactivity.
This function helps to prevent such behavior by sending comment events every
keep_interval
of inactivity.
By default the comment is :
(an empty comment) and the time interval between
events is 15 seconds. Both may be customized using the builder pattern
as shown below.
use std::time::Duration;
use std::convert::Infallible;
use futures_util::StreamExt;
use tokio::time::interval;
use tokio_stream::wrappers::IntervalStream;
use warp::{Filter, Stream, sse::Event};
// create server-sent event
fn sse_counter(counter: u64) -> Result<Event, Infallible> {
Ok(Event::default().data(counter.to_string()))
}
fn main() {
let routes = warp::path("ticks")
.and(warp::get())
.map(|| {
let mut counter: u64 = 0;
let interval = interval(Duration::from_secs(15));
let stream = IntervalStream::new(interval);
let event_stream = stream.map(move |_| {
counter += 1;
sse_counter(counter)
});
// reply using server-sent events
let stream = warp::sse::keep_alive()
.interval(Duration::from_secs(5))
.text("thump".to_string())
.stream(event_stream);
warp::sse::reply(stream)
});
}
See notes.