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

由于异步的原因,传过来的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中须要发送的协议全部发送完。

Apache Mina开发手冊之四的更多相关文章

  1. Apache Shiro 使用手冊 链接文件夹整理

    1.Apache Shiro 使用手冊(一)Shiro架构介绍 2.Apache Shiro 使用手冊(二)Shiro 认证 3.Apache Shiro 使用手冊(三)Shiro 授权 4.Apac ...

  2. HapiJS开发手冊

    HapiJS开发手冊 作者:chszs.转载需注明.博客主页:http://blog.csdn.net/chszs 一.HapiJS介绍 HapiJS是一个开源的.基于Node.js的应用框架,它适用 ...

  3. 阿里Java开发手冊之编程规约

    对于程序猿来说,编程规范能够养成良好的编程习惯,提高代码质量,减少沟通成本.就在2月9号,阿里出了一份Java开发手冊(正式版),分为编程规约.异常日志.MySQL规约,project规约.安全规约五 ...

  4. 谷歌Web中文开发手冊:3响应式

    https://developers.google.com/web/fundamentals/getting-started/your-first-multi-screen-site/responsi ...

  5. CAS 4.0 配置开发手冊

    1    下载 地址http://downloads.jasig.org/ cas-server-4.0.0-release.tar.gz cas-client-3.3.3-release.tar.g ...

  6. Java开发手冊 Java学习手冊教程(MtJava开发手冊)

    本文档的版权归MtJava文档小组全部,本文档及其描写叙述的内容受有关法律的版权保护,对本文档内容的不论什么形式的非法复制.泄露或散布.将导致对应的法律责任. MtJava仅仅是一个学习Java的简化 ...

  7. OBIEE开发手冊

    Creating a Repository Using the Oracle BI 11g Administration Tool cid=5690&ssid=0">http: ...

  8. Apache MiNa 实现多人聊天室

    Apache MiNa 实现多人聊天室 开发环境: System:Windows JavaSDK:1.6 IDE:eclipse.MyEclipse 6.6 开发依赖库: Jdk1.4+.mina-c ...

  9. Nginx中文手冊

    下载 : Nginx 中文手冊 Nginx 常见应用技术指南[Nginx Tips] 第二版 作者:NetSeek http://www.linuxtone.org (IT运维专家网|集群架构|性能调 ...

随机推荐

  1. Python中文显示问题

    默认pyhon使用ASCII码来解释程序的,默认不支持中文,需要在程序的第一行或者第二行声明编码. 官方解决方案:https://www.python.org/dev/peps/pep-0263/ T ...

  2. 数组Magic Index

    Question A magic index in an array A[1...n-1] is defined to be an index such that A[i] = i. Given a ...

  3. 如何在Objective-C中实现链式语法?

    在接触到开源项目 Masonry 后,里面的布局约束的链式写法让我颇感兴趣,就像下面这样: 1 2 3 4 5 6 7 8 UIEdgeInsets padding = UIEdgeInsetsMak ...

  4. ObjectiveC中的block用法解析

    Block Apple 在C, Objective-C,C++加上Block这个延申用法.目前只有Mac 10.6 和iOS 4有支持.Block是由一堆可执行的程序组成,也可以称做没有名字的Func ...

  5. golang之interface(接口)与 reflect 机制

    一.概述 什么是interface,简单的说,interface是一组method的组合,通过interface来定义对象的一组行为: interface类型定义了一组方法,如果某个对象实现了某个接口 ...

  6. C#深复制和浅复制

    本文在于巩固基础 我们来看看什么是深复制.浅复制: C#中对于数据的复制机制虽然简单但是容易让人误解.C#数据类型大体分为值类型(value type)与引用类型(reference type).对于 ...

  7. Powerdesigner逆向工程从sql server数据库生成pdm

    第一步:打开"控制面板"中的"管理工具" 第二步:点击"管理工具"然后双击"数据源(odbc)" 第三步:打开之后,点击 ...

  8. hahahahah

    dsfsefesfsffsfsfsfsfesfsfsfsfsfsfspackage realm;   import java.util.ArrayList; import java.util.List ...

  9. Node.cloneNode()方法

    概述 返回调用该方法的节点的一个副本. 语法 var dupNode = node.cloneNode(deep);node将要被克隆的节点dupNode克隆生成的副本节点deep 可选是否采用深度克 ...

  10. IOS7 position:fixed 定位问题

    在IOS7下position:fixed定位会出一些bug. 输入框 focus 状态下 fixed会随之改变.参见该页面详细描述(http://www.cnblogs.com/zhangdaipin ...