java mina框架实例_MINA框架简介和一个简单的例子
基于MINA框架快速开发网络应用程序
1.MINA框架简介
MINA(Multipurpose Infrastructure for Network Applications)是用于开发高性能和高可用性的网络应用程序的基础框架。通过使用MINA框架可以可以省下处理底层I/O和线程并发等复杂工作,开发人员能够把更多的精力投入到业务设计和开发当中。MINA框架的应用比较广泛,应用的开源项目有Apache Directory、AsyncWeb、Apache Qpid、QuickFIX/J、Openfire、SubEthaSTMP、red5等。MINA框架当前稳定版本是1.1.6,最新的2.0版本目前已经发布了M1版本。
MINA框架的特点有:基于java NIO类库开发;采用非阻塞方式的异步传输;事件驱动;支持批量数据传输;支持TCP、UDP协议;控制反转的设计模式(支持Spring);采用优雅的松耦合架构;可灵活的加载过滤器机制;单元测试更容易实现;可自定义线程的数量,以提高运行于多处理器上的性能;采用回调的方式完成调用,线程的使用更容易。
2.MINA框架的常用类
类NioSocketAcceptor用于创建服务端监听;
类NioSocketConnector用于创建客户端连接;
类IoSession用来保存会话属性和发送消息;
类IoHandlerAdapter用于定义业务逻辑,常用的方法有:
方法 定义
sessionCreated() 当会话创建时被触发
sessionOpened() 当会话开始时被触发
sessionClosed() 当会话关闭时被触发
sessionIdle() 当会话空闲时被触发
exceptionCaught() 当接口中其他方法抛出异常未被捕获时触发此方法
messageRecieved() 当接收到消息后被触发
messageSent() 当发送消息后被触发
3.服务端应用开发示例
下面将以MINA2.0M1版本为基础,通过一个范例来演示一下如何使用MINA框架进行开发。开发环境为jdk6.0,开发工具NetBeans6.0,所需jar包slf4j-api.jar、slf4j-jdk14.jar、MINA-core-2.0.0-M1.jar。
首先定义一个业务逻辑处理器TimeServerHandler,继承自IoHandlerAdapter,实现的功能有:当客户端创建会话时会显示客户端设备的IP和端口;当客户端输入quit时结束会话;客户端输入其它内容时则向客户端发送当前时间。代码如下:
public class TimeServerHandler extends IoHandlerAdapter {
@Override
public void sessionCreated(IoSession session) {
// 显示客户端的ip和端口
System.out.println(session.getRemoteAddress().toString());
}
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
String str = message.toString();
System.out.println("message="+str);
if (str.trim().equalsIgnoreCase("quit")) {
session.close();// 结束会话
return;
}
Date date = new Date();
session.write(date.toString());// 返回当前时间的字符串
System.out.println("Message written...");
}
}
再定义一个类MinaTimeServer用来启动服务端:
public class MinaTimeServer {
private static final int PORT = 9123;// 定义监听端口
public static void main(String[] args) throws IOException {
IoAcceptor acceptor = new NioSocketAcceptor();
acceptor.getFilterChain().addLast("logger", new LoggingFilter());
acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));// 指定编码过滤器
acceptor.setHandler(new TimeServerHandler());// 指定业务逻辑处理器
acceptor.setDefaultLocalAddress(new InetSocketAddress(PORT));// 设置端口号
acceptor.bind();// 启动监听
}
}
4.测试
首先运行MinaTimeServer,启动服务端,接着在命令行运行“telnet 127.0.0.1 9123”,来登录,这时会看到服务端输出如下:
2008-2-21 16:15:29 org.apache.MINA.filter.logging.LogLevel$4 log
/10.64.2.137:4140 IP和端口号
信息: CREATED
2008-2-21 16:15:29 org.apache.MINA.filter.logging.LogLevel$4 log
信息: OPENED 在客户端输入回车,在客户端可以看到服务端返回当前的时间:
Thu Feb 21 16:20:14 CST 2008
服务端输出:
2008-2-21 16:20:14 org.apache.MINA.filter.logging.LogLevel$4 log
信息: RECEIVED: HeapBuffer[pos=0 lim=2 cap=2048: 0D 0A] 接收收到回车符
Message written...
2008-2-21 16:20:14 org.apache.MINA.filter.logging.LogLevel$4 log
信息: SENT: HeapBuffer[pos=0 lim=29 cap=30: 54 68 75 20 46 65 62 20 32 31 20 31 36 3A 32 30...]
2008-2-21 16:20:14 org.apache.MINA.filter.logging.LogLevel$4 log
信息: SENT: HeapBuffer[pos=0 lim=0 cap=0: empty] 5.客户端开发示例
首先定义类TimeClientHandler来处理消息接收事件:
class TimeClientHandler extends IoHandlerAdapter {
public TimeClientHandler() {
}
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
System.out.println("message=" + message);// 显示接收到的消息
}
}
接着定义MinaTimeClient类用于连接服务端,并向服务端发送消息:
public class MinaTimeClient {
public static void main(String[] args) {
// 创建客户端连接器.
NioSocketConnector connector = new NioSocketConnector();
connector.getFilterChain().addLast("logger", new LoggingFilter());
connector.getFilterChain().addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8")))); // 设置编码过滤器
connector.setConnectTimeout(30);
connector.setHandler(new TimeClientHandler());// 设置事件处理器
ConnectFuture cf = connector.connect(new InetSocketAddress("127.0.0.1",9123));// 建立连接
cf.awaitUninterruptibly();// 等待连接创建完成
cf.getSession().write("hello");// 发送消息
cf.getSession().write("quit");// 发送消息
cf.getSession().getCloseFuture().awaitUninterruptibly();// 等待连接断开
connector.dispose();
}
}
6.总结
通过上述示例可以了解到:使用MINA框架来开发的网络应用程序代码结构更清晰;MINA框架完成了底层的线程管理;MINA内置的编码器可以满足大多数用户的需求,省去了开发人员消息编码解码的工作。具称使用MINA开发服务器程序的性能已经逼近使用 C/C++ 语言开发的网络服务。因此,建议在网络应用程序开发过程中尝试使用MINA框架来提高我们的开发效率和应用程序的执行效率。
java mina框架实例_MINA框架简介和一个简单的例子相关推荐
- java继承类型转换_#java 一个简单的例子理解java继承、成员函数重写、类型转换...
一个简单的例子理解java继承.成员函数重写.类型转换 1.继承简介 举一个简单的例子:笔分为很多种,比如毛笔.钢笔.圆珠笔等等,这些笔都有一些相同的属性比如长度.笔迹的粗细等等:但他们也有不同的特点 ...
- 一个简单的例子看java线程机制
一个简单的例子看java线程机制 作者: zyf0808 发表日期: 2006-03-26 11:20 文章属性: 原创 复制链接 import java.util.*; public class T ...
- java 框架 例子_如何设计Java框架? –一个简单的例子
通过优锐课核心java学习笔记中,我们可以看到,码了很多专业的相关知识, 分享给大家参考学习. 你可能对框架如何工作感到好奇? 这里将通过一个简单的框架示例来说明框架的思想. 框架目标 首先,为什么我 ...
- 如何设计 Java 框架?– 一个简单的例子
您可能对框架的工作原理感到好奇?这里将做一个简单的框架示例来演示框架的思想. 框架的目标 首先,为什么我们需要一个框架而不是一个普通的库?框架的目标是定义一个流程,让开发人员根据个人需求实现某些功能. ...
- JBoss 系列九十六:JBoss MSC - 简介及一个简单演示样例
什么是 JBoss MSC JBoss MSC 即 JBoss Modular Service Container,是第三代 JBoss 产品 JBoss 7和WildFfly的内核,JBoss MS ...
- 【javamatlab】以一个简单的例子实现java和matlab混编
目录 使用环境: MATLAB: matlab代码: 将matlab代码打包: eclipse: jar包配置: 使用jar包: 使用环境: jdk8(ide使用eclipse2019-6).matl ...
- idea创建java项目目录结构_用IDEA创建一个简单的Maven的JavaWeb项目
1.项目环境 IDEA:2016.2 JDK:1.8.0_76 Maven:3.2.5 2.File-->New-->Project-->Maven 3.选择Project SDK: ...
- Java入门篇(一)——如何编写一个简单的Java程序
最近准备花费很长一段时间写一些关于Java的从入门到进阶再到项目开发的教程,希望对初学Java的朋友们有所帮助,更快的融入Java的学习之中. 主要内容包括JavaSE.JavaEE的基础知识以及如何 ...
- 【Qt5开发及实例】16、实现一个简单的文本编辑器(over)
实现一个简单的文本编辑器 其他具体的代码基础看前面:http://blog.csdn.net/cutter_point/article/details/42839071 1.功能 这个程序又添加了文本 ...
- java入门篇(一)如何编写一个简单的程序
最近准备花费很长一段时间写一些关于Java的从入门到进阶再到项目开发的教程,希望对初学Java的朋友们有所帮助,更快的融入Java的学习之中. 主要内容包括JavaSE.JavaEE的基础知识以及如何 ...
最新文章
- Angular系列学习二:基本的组件说明、自定义组件和部分细节说明
- PDF转Word技巧,看这篇足够
- BetterAndBetter(BAB)的使用详解
- ReportViewer不连接数据库,自定义DataSet导出到报表
- loginservlet.java_求助HTTP Status 404 - /Book/servlet/cn.servlet.LoginServlet
- C结构和C++结构之间的区别是什么?
- [USACO13OPEN]Luxury River Cruise【模拟】
- Vicdas实时历史数据库
- U盘文件变成exe格式的解决办法
- 霹雳吧啦Wz语义分割学习笔记P2
- 什么是信息技术外包?
- JavaScript入门 正则表达式/元素运动 Day16
- 计算机课学生端重启,极域课堂管理系统怎么连接老师 学生端连接问题解决方法...
- pinpoint2.3.3安装和部署
- idea中springmvc的配置(结合how2j教程)
- Windows10和ubuntu22双系统安装
- 阿赵的MaxScript学习笔记分享五《UI组件使用篇》
- 煎饼,娇妻,Belief:黄太吉的移动互联网营销
- 《Linux操作系统 - 驱动开发》第9章 进程上下文、中断上下文及原子上下文
- qq客服在线和msn客服在线代码