apache mina 学习(六)-----session

session是mina最重要的部分之一,每次客户端和服务器建立连接服务器都会创建一个session,并为这个session分配一块内存,直到客户端关闭或是失去了连接。

session的状态由以下几种:

1、Connected:session已经创建并且是可用的

2、idle:空闲状态,session可用但是没有任何的请求或是数据传输

3、closing:session正在被关闭

4、closed:session已经被关闭

下面的图说明了他们的转换关系:

apache mina 学习(六)-----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中写一些信息,然后发送给业务层的代码。

你可能感兴趣的:(session)