feat(server): add idle_timeout to Server

Closes #790
This commit is contained in:
Sean McArthur
2016-07-14 17:23:13 -07:00
parent 8de8b74a8f
commit 02cb96ac2d

View File

@@ -117,6 +117,7 @@ impl<A: Accept> Server<A> where A::Output: Transport {
config.slab_capacity(self.max_sockets); config.slab_capacity(self.max_sockets);
config.mio().notify_capacity(self.max_sockets); config.mio().notify_capacity(self.max_sockets);
let keep_alive = self.keep_alive; let keep_alive = self.keep_alive;
let idle_timeout = self.idle_timeout;
let mut loop_ = rotor::Loop::new(&config).unwrap(); let mut loop_ = rotor::Loop::new(&config).unwrap();
let mut notifier = None; let mut notifier = None;
{ {
@@ -135,8 +136,9 @@ impl<A: Accept> Server<A> where A::Output: Transport {
}; };
let server = ServerLoop { let server = ServerLoop {
inner: Some((loop_, Context { inner: Some((loop_, Context {
factory: factory,
idle_timeout: idle_timeout,
keep_alive: keep_alive, keep_alive: keep_alive,
factory: factory
})) }))
}; };
Ok((listening, server)) Ok((listening, server))
@@ -162,8 +164,9 @@ impl<A: Accept, H: HandlerFactory<A::Output>> Drop for ServerLoop<A, H> {
} }
struct Context<F> { struct Context<F> {
keep_alive: bool,
factory: F, factory: F,
idle_timeout: Option<Duration>,
keep_alive: bool,
} }
impl<F: HandlerFactory<T>, T: Transport> http::MessageHandlerFactory<(), T> for Context<F> { impl<F: HandlerFactory<T>, T: Transport> http::MessageHandlerFactory<(), T> for Context<F> {
@@ -174,9 +177,13 @@ impl<F: HandlerFactory<T>, T: Transport> http::MessageHandlerFactory<(), T> for
} }
fn keep_alive_interest(&self) -> Next { fn keep_alive_interest(&self) -> Next {
if let Some(dur) = self.idle_timeout {
Next::read().timeout(dur)
} else {
Next::read() Next::read()
} }
} }
}
enum ServerFsm<A, H> enum ServerFsm<A, H>
where A: Accept, where A: Accept,