apache mina 学习(六)session
–>
session是mina最重要的部分之一,每次客户端和服务器建立连接服务器都会创建一个session,并为这个session分配一块内存,直到客户端关闭或是失去了连接。
session的状态由以下几种:
1、Connected:session已经创建并且是可用的
2、idle:空闲状态,session可用但是没有任何的请求或是数据传输
3、closing:session正在被关闭
4、closed:session已经被关闭
下面的图说明了他们的转换关系:
配置参数:
1、receive buffer size :用于接收的buffer大小
2、sending buffer size:发送的buffer大小
3、idle time:空闲的时长
4、write timeOut:写超时时间
这个session的操作和httpsession有相似之处,我们可以把session生命周期的变量进行共享和传递,
session.setAttribute( "counter", counterValue + 1 );即可
当然了我们需要先初始化这个容易,才能后续使用,这就是一个典型的key-value容器,在哪里初始化呢?答案当然是在session初始化的时候了:
protected final void initSession(IoSession session,
IoFuture future, IoSessionInitializer sessionInitializer) {
...
try {
((AbstractIoSession) session).setAttributeMap(session.getService()
.getSessionDataStructureFactory().getAttributeMap(session));
} catch (IoSessionInitializationException e) {
throw e;
} catch (Exception e) {
throw new IoSessionInitializationException(
"Failed to initialize an attributeMap.", e);
}
...
FilterChain:
每一个session都关联了一些过滤器,这些过滤器组成了过滤链,当有请求进出的时候都要经过这些过滤器的过滤,每一个过滤链可以配置给特别的session来使用,但是大多数情况下我们都是用一个过滤链来过滤所有的session。
session也会跟踪和统计一些信息,比如发送和接收的字节数、消息数、吞吐量等等。
我们也可以通过session的write方法向session中写一些信息,然后发送给业务层的代码。
本文来源 互联网收集,文章内容系作者个人观点,不代表 本站 对观点赞同或支持。如需转载,请注明文章来源,如您发现有涉嫌抄袭侵权的内容,请联系本站核实处理。
© 版权声明
文章版权归作者所有,未经允许请勿转载。