Apache Mina开发手冊之四
作者:chszs,转载需注明。
博客主页:http://blog.csdn.net/chszs
一、Mina开发的主要步骤
1、创建一个实现了IoService接口的类
IoService接口有两个子接口:
1)IoAcceptor接口,用于server
2)IoConnection接口,用于client
IoService接口的目的是提供服务。有几个默认实现:
NioDatagramAcceptor、NioDatagramConnector
NioSocketAcceptor、NioSocketConnector
VmPipeAcceptor、VmPipeConnector
ProxyConnector
2、设置一个过滤器。假设须要自己定义过滤器,那么此过滤器须要实现了IoFilter接口
IoFilter作用是建立一层过滤网。作用与Servlet规范中的过滤器一样。
IoFilter接口的默认实现比較多,有些仅供内部使用。有些供用户使用,并且过滤器的顺序能够影响程序的执行。
经常使用的实现类包含:
1)ExecutorFilter:从此过滤器后的不论什么操作都工作于这个Executor
2)LoggingFilter:日志操作过滤器,记录日志用的
3)ProtocolCodecFilter:实现协议层和业务层的分离。
4)ProxyFilter:代理过滤器,拦截请求或响应,转发给代理。
5)SslFilter:用于SSL通信
3、创建一个实现了IoHandler接口的处理类,用于处理事件
处理业务逻辑,尤其要注意里面的IoSession接口。
4、对IoService绑定一个port開始工作
二、Mina自己定义协议
Mina中的样例:
org.apache.mina.example.chat:支持Spring、Jmx、自己定义协议
org.apache.mina.example.imagine:支持Jmx、自己定义协议
org.apache.mina.example.sumup:支持自己定义协议
org.apache.mina.example.tapedeck:状态机的示范、自己定义协议
三、协议解码器
协议解码器是依赖于ProtocolDecoder接口:
public interface ProtocolDecoder{ // 把二进制协议或特定协议的内容解码成高级消息 void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out); // 当指定的会话关闭时调用此方法 void finishDecode(IoSession session, ProtocolDecoderOutput out); // 释放此解码器相关的全部资源 void dispose(IoSession session) throws Exception; }
doDecode方法要求假设能解析一个协议,则把此协议解析后放入ProtocolDecoderOutput类,并返回true。反之则直接返回false。并须要手动回滚POS。
协议解码器类有两种工作方式:
1)全然交由doDecode处理
2)逻辑部分交由doDecode方法处理。IoBuffer是半自己主动的
四、协议编码器
协议编码器依赖于ProtocolEncoder接口。
public interface ProtocolEncoder{ // 把高级消息对象编码成二进制或特定协议的数据 void encode(IoSession session, Object message, ProtocolEncoderOutput out); // 释放此协议编码器相关的全部资源 void dispose(IoSession session) throws Exception; }