4个版本
使用旧的Rust 2015
0.5.0 | 2016年7月8日 |
---|---|
0.4.2 | 2016年4月24日 |
0.4.1 | 2016年3月27日 |
0.4.0 | 2016年3月19日 |
#466 in HTTP客户端
88KB
1K SLoC
概述
该Crate为Iron开发的应用程序提供会话对象。该会话对象由您的应用程序实现,与单个HTTP客户端相关联。所有从这个HTTP客户端发出的请求都将访问此对象。会话对象将在可配置的空闲时间后销毁。因此,如果30分钟内没有来自客户端的请求,会话将被销毁,并回收内存。
示例
use std::fmt::Write;
use std::sync::{Arc, Mutex};
use iron::{Iron, Chain, Request, Response};
use iron::status::Status;
use fe_session::{FeSessionStorage, FeSession, FeConnection, FeSessionRequest, FeSessionState};
let mut chain = Chain::new(|req : &mut Request| {
let mut session = req.get_session::<usize>();
let mut result = String::new();
match session.state() {
FeSessionState::Expired => { // Old session expired, create a new one.
req.create_session(0 as usize);
write!(result, "{}", 0).unwrap();
},
FeSessionState::None => { // No session, create a new one.
req.create_session(0 as usize);
write!(result, "{}", 0).unwrap();
},
FeSessionState::Active => { // Active session, increment the count.
let mut count = session.get();
*count += 1;
write!(result, "{}", *count).unwrap();
}
}
Ok(Response::with((Status::Ok, result)))
});
chain.around(FeSessionStorage::<usize>::new());
let mut iron = Iron::new(chain).http(("localhost", 3000)).unwrap();
let mut conn1 = FeConnection::new("localhost", 3000);
let mut conn2 = FeConnection::new("localhost", 3000);
assert_eq!(conn1.get_string("/"), "0");
assert_eq!(conn2.get_string("/"), "0");
assert_eq!(conn1.get_string("/"), "1");
assert_eq!(conn1.get_string("/"), "2");
assert_eq!(conn2.get_string("/"), "1");
iron.close().unwrap();
依赖关系
~5.5MB
~125K SLoC