Apache Mina开发手冊之四
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开发手冊之四的更多相关文章
- Apache Shiro 使用手冊 链接文件夹整理
1.Apache Shiro 使用手冊(一)Shiro架构介绍 2.Apache Shiro 使用手冊(二)Shiro 认证 3.Apache Shiro 使用手冊(三)Shiro 授权 4.Apac ...
- HapiJS开发手冊
HapiJS开发手冊 作者:chszs.转载需注明.博客主页:http://blog.csdn.net/chszs 一.HapiJS介绍 HapiJS是一个开源的.基于Node.js的应用框架,它适用 ...
- 阿里Java开发手冊之编程规约
对于程序猿来说,编程规范能够养成良好的编程习惯,提高代码质量,减少沟通成本.就在2月9号,阿里出了一份Java开发手冊(正式版),分为编程规约.异常日志.MySQL规约,project规约.安全规约五 ...
- 谷歌Web中文开发手冊:3响应式
https://developers.google.com/web/fundamentals/getting-started/your-first-multi-screen-site/responsi ...
- CAS 4.0 配置开发手冊
1 下载 地址http://downloads.jasig.org/ cas-server-4.0.0-release.tar.gz cas-client-3.3.3-release.tar.g ...
- Java开发手冊 Java学习手冊教程(MtJava开发手冊)
本文档的版权归MtJava文档小组全部,本文档及其描写叙述的内容受有关法律的版权保护,对本文档内容的不论什么形式的非法复制.泄露或散布.将导致对应的法律责任. MtJava仅仅是一个学习Java的简化 ...
- OBIEE开发手冊
Creating a Repository Using the Oracle BI 11g Administration Tool cid=5690&ssid=0">http: ...
- Apache MiNa 实现多人聊天室
Apache MiNa 实现多人聊天室 开发环境: System:Windows JavaSDK:1.6 IDE:eclipse.MyEclipse 6.6 开发依赖库: Jdk1.4+.mina-c ...
- Nginx中文手冊
下载 : Nginx 中文手冊 Nginx 常见应用技术指南[Nginx Tips] 第二版 作者:NetSeek http://www.linuxtone.org (IT运维专家网|集群架构|性能调 ...
随机推荐
- Linux中的那些英文缩写和她的含义们
系统 man: Manual 意思是手册,可以用这个命令查询其他命令的用法. pwd:Print working directory 打印工作路径. su:Swith user 切换用户,切换到roo ...
- 理解C语言声明的优先级规则
声明从它的名字开始读取,然后依次按优先级依次读取. 优先级从高到低依次是 声明中被括号括起来的那部分 后缀操作符: 括号()表示这是一个函数 方括号表[]这是一个数组 前缀操作符:星号*表示“指向.. ...
- 基本数据结构简介--ath9k网卡驱动开发总结(二)
ath9k驱动代码主要数据结构概览. (1)在ath9k的驱动中,几乎是最顶层的数据结构是ath_softc,这个数据结构几乎随处可见.ath_softc是硬件与MAC层进行交互的中间载体,很多有用的 ...
- Linux 分区初始化为物理卷,把物理卷加入卷组
用到的命令有 1.pvcreate (physical volume create) 2.vgcreate (volume group create) 例子1:创建物理卷 pvcreate /dev/ ...
- 30款javascript脚本插件 jquery插件大全
Shifty Nav - a Fully Responsive JS CSS3 Mega Menu Show Demo Shifty Nav is a fully responsive CSS3 ...
- 省去路由器,Windows 7 也能做无线AP
电脑越来越白菜了,很多朋友家里已经有不少于二台电脑了.比方说一台笔记本一台台试机,哪么上网和联机的问题,随之而来了,二台电脑很多人可能会去买一个路由器,事实上,如果你其中一台有二个网卡一个有线一个无线 ...
- python教程,文章list
http://www.2cto.com/kf/web/Python/ http://www.v2ex.com/go/python http://www.sharejs.com/codes/python ...
- 关于ajax中async参数的感悟
async,这个参数默认为true. 就是异步去处理信息. 当把它设置为false的时候,就是同步去处理数据了. var current_lead_id = '<?php echo $curre ...
- DZY的根(思维水)
DZY的根[问题描述]DZY是个没有根的人,他十分想要有根,这样才能...智商爆表的计算机大神WJC决定再帮帮他,他用程序制造了N个根——有生命的根!这N个根和WJC一样都十分机智,他们要参加国际象棋 ...
- java 中解决中文乱码问题的方法(三法)
1. 重新定义. String str = "中文试试" ; str = new String(u.getBytes("iso-8859-1"),"u ...