Apache Mina开发手册之四

简介: Apache Mina开发手册之四 一、Mina开发的主要步骤 1、创建一个实现了IoService接口的类 IoService接口有两个子接口: 1)IoAcceptor接口,用于服务器 2)IoConnection接口,用于客户端 ...

Apache Mina开发手册之四

一、Mina开发的主要步骤

1、创建一个实现了IoService接口的类

IoService接口有两个子接口:
1)IoAcceptor接口,用于服务器
2)IoConnection接口,用于客户端

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绑定一个端口开始工作

二、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;
}

由于异步的原因,传过来的IoBuffer所接受的内容是不完全确定的,也即IoBuffer中对于一次receive后,存放的不一定是一个完整的协议,有可能是多个不完整的协议,也可能刚好是一个完整的协议,这些都不确定。
基于以上情况,实际开发一般是实现CumulativeProtocolDecoder类,此抽象类的作用是为解析协议提供一些帮助,此抽象类实现了ProtocolDecoder接口中的decode接口,并抽象出一个doDecode方法。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;
}

协议编码器可以做到全自动,因为可以一次性把所需的内容写入IoBuffer,并交给ProtocolEncoderOutput,后台会根据缓冲区的大小,能写入多少就写入多少,直到把ProtocolEncoderOutput中需要发送的协议全部发送完。

目录
相关文章
|
4月前
|
消息中间件 数据采集 编解码
apache mina
apache mina
43 0
|
11月前
|
Java Apache Spring
Spring BeanUtils 2、Cglib BeanCopier 3、Apache BeanUtils 4、Apache PropertyUtils 5、Dozer 那么,我们到底应该选择哪种工具类更加合适呢?为什么Java开发手册中提到禁止使用Apache BeanUtils呢
Spring BeanUtils 2、Cglib BeanCopier 3、Apache BeanUtils 4、Apache PropertyUtils 5、Dozer 那么,我们到底应该选择哪种工具类更加合适呢?为什么Java开发手册中提到禁止使用Apache BeanUtils呢
103 0
|
网络协议 Java API
Apache Mina高性能通信框架研究邮件列表.
Apache Mina高性能通信框架研究邮件列表.
63 0
|
Apache 编解码 网络协议
|
Apache Java Spring
Apache Mina开发手册之四
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/40544275 Apache Mina开发手册之四 作者:chszs,转载需注明。
889 0
|
Apache 编解码
Apache Mina开发手册之三
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/39617969 Apache Mina开发手册之三 作者:chszs,转载需注明。
942 0
|
Java Apache 容器
Apache Mina开发手册之二
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/39550367 Apache Mina开发手册之二 作者:chszs,转载需注明。
899 0
|
API Apache
Apache Mina v2.0.8 API手册
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/39550809 Apache Mina v2.0.8 API手册 作者:chszs,转载需注明。
1032 0

相关实验场景

更多

推荐镜像

更多