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中写一些信息,然后发送给业务层的代码。

根据提供的引用内容,mina-filter是一个用于Apache MINA(Multipurpose Infrastructure for Network Applications)框架的过滤器。MINA是一个基于Java的网络应用程序框架,用于开发高性能和可扩展的网络应用程序。 MINA框架使用过滤器链来处理输入和输出数据。过滤器链由多个过滤器组成,每个过滤器负责处理特定的任务,例如数据压缩、数据加密、协议解析等。过滤器链可以根据应用程序的需求进行配置和定制。 以下是一个使用mina-filter的示例: ```java import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder; import org.apache.mina.core.filterchain.IoFilterAdapter; import org.apache.mina.core.session.IoSession; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.logging.LoggingFilter; public class MinaFilterExample { public static void main(String[] args) { // 创建过滤器链 DefaultIoFilterChainBuilder filterChain = new DefaultIoFilterChainBuilder(); // 添加日志过滤器 filterChain.addLast("logger", new LoggingFilter()); // 添加协议编解码过滤器 filterChain.addLast("codec", new ProtocolCodecFilter(new MyProtocolCodecFactory())); // 添加自定义过滤器 filterChain.addLast("myFilter", new MyFilter()); // 创建MINA服务器 NioSocketAcceptor acceptor = new NioSocketAcceptor(); acceptor.setFilterChainBuilder(filterChain); // 启动服务器 try { acceptor.bind(new InetSocketAddress(8888)); System.out.println("Server started on port 8888"); } catch (IOException e) { e.printStackTrace(); } } // 自定义协议编解码工厂 private static class MyProtocolCodecFactory implements ProtocolCodecFactory { // 实现编解码逻辑 // ... } // 自定义过滤器 private static class MyFilter extends IoFilterAdapter { @Override public void messageReceived(NextFilter nextFilter, IoSession session, Object message) throws Exception { // 处理接收到的消息 // ... } @Override public void messageSent(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception { // 处理发送的消息 // ... } } } ``` 上述示例中,我们创建了一个MINA服务器,并配置了一个过滤器链。过滤器链包括日志过滤器、协议编解码过滤器和自定义过滤器。日志过滤器用于记录日志信息,协议编解码过滤器用于处理数据的编码和解码,自定义过滤器用于处理接收和发送的消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值