Session(会话)是Mina的核心部分:每当一个clinent连接到server时,都会创建一个新的session,并且保存在内存中知道该链接断开。

session 是用来存储一些关于连接信息,加上各种服务端在处理请求时可能会用到的信息。

Session state

session有一个状态,并且会随着时间变化。

1. Connected:session已经被创建并且是可用的
2. Idle:session 在一段时间(可配置)能没有处理任何请求。

   A:Idle for read:在一段时间内没有任何读发生  
   
   B:Idle for write:在一段时间内没有任何写发生  

   C:Idle for both:在一段时间内没有任何读写发生

3. Closing:session出于关闭过程中

4. Closed:session已关闭,不能再使用

下图为session的状态图

Configuration

我们可以为一个session设置很多参数

1. receive buffer size:接受缓冲区的大小

2. sending buffer size:发送缓冲区的大小

3. Idle time:空闲确认时间

4. 写数据超时时间

加上一些其他的设置,依赖于通讯类型。

Managing user-defined attributes

session中可以已键值对(key - value)的方式存放数据,然后再后续过程中使用。例如你想跟踪一个session自从被创建后已经发送了多少个请求,通过将笔数计入到session

中就可以很容易的实现该功能。

int counterValue = session.getAttribute( "counter" );
session.setAttribute( "counter", counterValue + 1 );

Defining the container

上面讲到了session中存放数据,是用了session中默认的container是使用map结构,但是我们依然可以自定义另一种数据结构来存放数据,这可以解决如果我们想避免存储那

些很大的数据在内内存中。可通过实现一个factory接口,该接口在session创建中将会被用于创建容器(container)。

以下代码展示了在session初始化过程中如何创建container的

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);
}
..

以下代码则展示了如果我们想要自定义container则需要实现的工厂类接口:

public interface IoSessionDataStructureFactory {
/**
* Returns an {@link IoSessionAttributeMap} which is going to be associated
* with the specified <tt>session</tt>. Please note that the returned
* implementation must be thread-safe.
*/
IoSessionAttributeMap getAttributeMap(IoSession session) throws Exception;
}

Filter Charin

每一个session都会关联一个filters chain,这些filter对每一个session之间都是独立的,即使在所有的session中使用相同的filter chain.

然而,我们也可以为某一个session添加一个filter。例如为某一指定的session添加一个Logger Filtter。

Statistics

每一个Session也可记录下在这个session中所有的操作:

1.  接受或发送的字节数

2.  接受或发送的消息数

3. 空闲状态

4. 吞吐量

和一些其他有用的信息

Handler

最后,尤为重要的是,每个session都会附加上一个IoHandler,负责发送消息给应用程序,并且通过session发送应答包,调用方法write()。

session.write( <your message> );

至此,已将IoSession介绍完了,下篇将介绍IoFilter。


Mina学习之IoSession的更多相关文章

  1. 【MINA学习笔记】—— 1.体系结构分析[z]

    前言 Apache的MINA框架是一个早年非常流行的NIO框架,它出自于Netty之父Trustin Lee大神之手.虽然目前市场份额已经逐渐被Netty取代了,但是其作为NIO初学者入门学习框架是非 ...

  2. MINA学习汇总

    MINA学习汇总 Apache Mina Server 是一个网络通信应用框架,用于开发高性能和高可用性的网络应用程序.它主要是对基于TCP/IP.UDP/IP协议栈的通信框架(然,也可以提供JAVA ...

  3. Mina学习之---mina整体流程介绍

    现在公司使用的NIO框架一直时候Mina,当然这也的框架还有Netty.虽然一直在用,但只是简单的停留在业务层面,最近面试的时候有问Mina相关的东西.在之前的博客中已经对BIO,NIO,AIO这三种 ...

  4. NIO框架Mina学习

    前言: 找了篇文章看了看,nio框架数Mina用的最多! 代码: 服务端: package com.mina; import java.net.InetSocketAddress; import ja ...

  5. mina学习

    长连接表示一旦建立了链接,就可以长时间的保持双方的通讯,例如: socket链接,推送平台. 短链接表示建立链接,完成数据的交换之后,就断开链接,例如: http链接. mina 框架是对socket ...

  6. MINA学习之体系介绍

    基于MINA应用程序结构图: 我们可以看出,MINA是应用程序(客户端或服务端)和底层基于TCP,UDP等通讯协议的网络层之间的粘合剂.而且各个模块之间是相互独立的,你只需要在MINA体 系基础上设计 ...

  7. Mina学习+手写服务端+通过telnet连接服务端

    1. 2. 3. 4.MinaServer.java package com.mina; import java.io.IOException;import java.net.InetSocketAd ...

  8. mina学习(一)

    Mina:是一个帮助用户开发高性能和高伸缩性网络应用程序的框架 学习地址链接:http://www.cnblogs.com/xuekyo/archive/2013/03/06/2945826.html ...

  9. Mina学习之IoFilter

    IoFilter 是MINA中的一个核心结构,扮演了非常重要的角色.IoFilter在IoService和IoHandler过滤了所有的I/O 事件和请求.如果你有做个web项目的经验,则很类似于we ...

随机推荐

  1. 【javascript 动态添加数据到 HTML 页面】

    今天简单的学习了一下有关对象字面量的定义和 javascript 如何取出对象字面量的值的知识,javascript 动态添加数据到 HTML 页面的问题. [学习目标]有如下的一组数据通过 Ajax ...

  2. hadoop1中partition和combiner作用

    ---恢复内容开始--- 1.解析Partiton 把map任务的输出的中间结果按照key的范围进行划分成r份,r代表reduce任务的个数.hadoop默认有个类HashPartition实现分区, ...

  3. 怎么利用ultraISO对一个文件夹制作ISO镜像

    1. 运行UltraISO软件,选择好需要转换成ISO的文件,直接拖到UltraISO的界面中. 2.点击“另存为”按钮,选择存放路径并写上ISO文件的名称,文件保存类型选择为ISO格式,点击“保存” ...

  4. 贴板子系列_1-km算法,匈牙利算法

    KM算法 #include <bits/stdc++.h> #define N 1500 #define inf 999999999 using namespace std; ,ny=,k ...

  5. 双积分式(A/D)转换器电路结构及工作原理

    1.转换方式 V-T型间接转换ADC. 2.  电路结构 图1是这种转换器的原理电路,它由积分器(由集成运放A组成).过零比较器(C).时钟脉冲控制门(G)和计数器(ff0-ffn)等几部分组成 图1 ...

  6. iOS - instancetype

    OC是一门正在迅速发展的语言,ARC,object literals ,subscripting ,blocks,Auto Synthesis,让我们看到它惊人的改变.instancetype是cla ...

  7. jQuery获取屏幕的宽度

    Javascript: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网页可见区域宽: document.b ...

  8. [原博客] HEOI2014 行记

    HEOI: 河北省信息学竞赛省队选拔赛 HEOI数据标程下载 百度盘 http://pan.baidu.com/s/1qWx7YAo 又到了一年一度的HEOI呢. 我果然还是太弱了呢. Day0 报到 ...

  9. uva 12097 - Pie

    简单题,二分就行: #include<cstdio> #include<cmath> #define pi acos(-1.0) #define eps 0.000001 #d ...

  10. 【2011 Greater New York Regional 】Problem I :The Golden Ceiling

    一道比较简单但是繁琐的三维计算几何,找错误找的我好心酸,没想到就把一个变量给写错了 = =: 题目的意思是求平面切长方体的截面面积+正方体顶部所遮盖的面积: 找出所有的切点,然后二维凸包一下直接算面积 ...