
mina
Cages
care about your craft
展开
-
apache mina 学习(十四)-----与spring整合
mina与spring整合的主要问题就是mina中一些bean的配置需要spring的ioc,我们首先看一个简单的服务端代码:public void initialize() throws IOException { // Create an Acceptor NioDatagramAcceptor acceptor = new NioDatagramAcceptor(); // A原创 2012-03-21 15:49:57 · 10221 阅读 · 3 评论 -
apache mina 学习(十二)-----状态机(stateMachine)
mina状态机的工作原理:mina中引入了StateContext对象,顾名思义是一个状态上下文对象,用来保存当前的状态,当代理state对象的方法被调用的时候,这个上下文对象会通知stateContextLookup的实例去从方法参数中获取stateContext,通常情况下StateContextLookup 的实现类会循环方法的参数进行查找,并创建指定的对象,并从这个对象中得到一个上原创 2012-03-21 15:06:15 · 6324 阅读 · 0 评论 -
apache mina 学习(十一)-----状态机(stateMachine)
当我们在开发复杂的网络应用的时候往往需要一个状态的设计,下面就以官网的一个收录机播放为例来说明:收录机状态之间的转换我们应该不难理解:首先是空状态,就是什么磁带就没放进去然后是有磁带的状态,这两个状态之间的转换就是通过eject方法和load方法来交互的,loaded表示已经有磁带了,那么我们发出play指令,这时候收录机就会播放磁带,这就是一个新状态playing,当我们点击stop时,原创 2012-03-21 09:28:54 · 3566 阅读 · 0 评论 -
apache mina 学习(十)-----Codec Filter
首先明白为什么用 ProtocolCodecFilter:1、TCP保证了按顺序传输所有的数据包,但是不能保证发送端进行了一个写操作会导致接收端相应的进行一个读操作。2、在mina中如果没有ProtocolCodecFilter,发送端的 一个IoSession.write(Object message)操作会触发接收端的多个messageReceived(IoSessionsession原创 2012-03-19 15:46:57 · 8541 阅读 · 2 评论 -
apache mina 学习(九)-----IoBuffer
mina中没有直接使用java nio中原生的ByteBuffer作为底层缓存流处理方式,具体的原因官方给出的主要是:1、NIO ByteBuffer没提供很可用的getters 和putters 。2、很难在固定的大小中写入可变长度的数据。当然mina并不是不让我们用原生的nio的ByteBuffer,这一点我们可以从IoBuffer的allocat方法得知:public原创 2012-03-19 10:08:20 · 7225 阅读 · 0 评论 -
apache mina 学习(八)-----Handler
简单介绍一下Handler接口关注的事件:1、sessionCreated event :当一个新的connection创建的时候,这个事件就会被触发,对于TCP请求来说是三次握手的最后一次请求成功,对于UDP协议来说是收到数据报报文的时候,我们可以在这个方法中加入对session初始化的一些操作和配置。2、sessionOpened event :当connection打开的时候会被触发原创 2012-03-19 09:30:17 · 4022 阅读 · 0 评论 -
apache mina 学习(五)-----IoService接口及实现
IoService接口的主要职责:监听管理Io流处理session管理过滤链管理统计信息管理它的主要实现类是AbstractIoServiceIoService是 IoConnector和IoAcceptor的父接口,主要包含以下的方法:getTransportMetadata() addListener()removeListener()isDispo原创 2012-03-15 15:09:25 · 3280 阅读 · 0 评论 -
apache mina 学习(六)-----session
session是mina最重要的部分之一,每次客户端和服务器建立连接服务器都会创建一个session,并为这个session分配一块内存,直到客户端关闭或是失去了连接。session的状态由以下几种:1、Connected:session已经创建并且是可用的2、idle:空闲状态,session可用但是没有任何的请求或是数据传输3、closing:session正在被关闭4、c原创 2012-03-15 16:56:16 · 3648 阅读 · 0 评论 -
apache mina 学习(七)-----IoFilter
IoFilter是mina中一个非常重要的设计,它可以过滤IoService 和IoHandler之间的所有的io流,经常会用到的过滤器:1、日志过滤器LoggingFilter2、协议编码过滤器ProtocolCodecFilter(可以把输入的bytebuffer转换为pojo)3、压缩过滤器CompressionFilter用于压缩数据4、sslFilter用于支持ssl原创 2012-03-16 09:33:53 · 3330 阅读 · 0 评论 -
apache mina 学习(四)-----日志配置
用Log4J 1.2.x的框架时,我们需要三个jar包:log4j-1.2.3.jar slf4j-api-1.6.2jar slf4j-log4j12-1.6.2jar 从名字上可以看出第三个是主要的jar包,提供了前两者的增强功能。下面我们以一个例子来说明日志过滤器的配置方法:首先我们创建一个log4j的配置文件并设置日志输出级别为debug:log4j.appender.MI原创 2012-03-15 14:41:57 · 11119 阅读 · 0 评论 -
apache mina 学习(三)-----Mina架构
mina的架构图:说明了mina是介于用户业务和底层的socket之间的中间层下面是详细的架构:I/O Service 扮演实际的IO角色I/O Filter Chain 在输入和输出的io流中进行过滤I/O Handler 业务逻辑实现根据以上的信息可以知道,要创建一个mina的应该一般分三步:1、选择一个已经存在的I/原创 2012-03-14 12:28:59 · 6040 阅读 · 1 评论 -
apache mina 学习(二)-----时间服务器分析
上篇文章的时间服务器的例子是apache mina官网上的demo,首先在main函数中定义了一个IoAcceptor,这个IoAcceptor就是服务器接收io流的入口,接收到的io流我们该怎么处理呢,NioSocketAcceptor告诉我们用nio的一个socket连接来处理,SocketAcceptor是基于TCP/IP的编程实现。接下来就是加入过滤连,也就是配置filter了,log原创 2012-03-14 11:22:42 · 3264 阅读 · 0 评论 -
apache mina 学习(一)-----时间服务器
timeServer的例子:服务器:public class TimeMachineServer { private static final int PORT = 9123; public static void main( String[] args ) throws IOException { IoAcceptor accept原创 2012-03-13 18:02:38 · 6114 阅读 · 1 评论 -
apache mina 学习(十三)-----状态机和IoHander配合使用
现在我们把上一张的收录机的例子改造为一个tcp服务器,用文本的传输,效果如下;telnet localhost 12345S: + Greetings from your tape deck!C: listS: + (1: "The Knife - Silent Shout", 2: "Kings of convenience - Riot on an empty street")C:原创 2012-03-21 15:36:47 · 3225 阅读 · 0 评论