- 浏览: 452217 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (371)
- Java (44)
- Flex (25)
- Design Pattern / UML (5)
- JVM (14)
- Software Engineer (4)
- Testing (30)
- Web Backend (60)
- Linux (7)
- Database (11)
- SOA (28)
- English (6)
- FX (5)
- SAP Support (25)
- SAP Development (5)
- SAP Impl & Oprn (8)
- Articles (15)
- Music (4)
- Recipe (14)
- Multi-thread (4)
- Lucene (2)
- CS basic / Algorithm (12)
- Tour (3)
- C C++ (21)
- Others (10)
- Code Repository C++ (1)
- Code Repository Java (1)
- Code Repository Algorithm (1)
- Code Repository SQL (1)
- Web Frontend (4)
最新评论
-
xiangxm:
Java 强引用、 软引用、 弱引用、虚引用 -
nml-lyb:
123
Mule 的第一个例子 -
nml-lyb:
http://www.baidu.com
Mule 的第一个例子 -
white___ant:
...
Java 强引用、 软引用、 弱引用、虚引用 -
joeyon:
...
Java NIO介绍
2007 年 12 月 24 日
本文将通过一个简单的问候程序 HelloServer 来介绍 MINA 的基础架构的同时演示如何使用 MINA 开发网络应用程序。<!-- START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --> <!-- END RESERVED FOR FUTURE USE INCLUDE FILES-->
Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中。
目 前正在使用 MINA 的软件包括有:Apache Directory Project、AsyncWeb、AMQP(Advanced Message Queuing Protocol)、RED5 Server(Macromedia Flash Media RTMP)、ObjectRADIUS、Openfire 等等。
本文将通过一个简单的问候程序 HelloServer 来介绍 MINA 的基础架构的同时演示如何使用MINA 开发网络应用程序。
- 首先到官方网站下载最新的 MINA 版本,地址是:http://mina.apache.org/downloads.html 。 下载之前先介绍一下 MINA 的两个版本:1.0.x 适合运行环境为 JDK1.4,1.1.x 适合 JDK1.5 的版本,两者的编译环境都需要 JDK1.5。JDK1.5 已经是非常普遍了,本文中使用 1.1.5 版本的 MINA,编译和运行所需的文件是 mina-core-1.1.5.jar。
- 下载 MINA 的依赖包 slf4j。MINA 使用此项目作为日志信息的输出,而 MINA 本身并不附带此项目包,请到http://www.slf4j.org/download.html 地址下载 slf4j 包,slf4j 项目解压后有很多的文件,本例中只需要其中的 slf4j-api-1.4.3.jar 和 slf4j-simple-1.4.3.jar 这两个 jar 文件。如果没有这两个文件就会导致启动例子程序的时候报 org/slf4j/LoggerFactory 类没找到的错误。
- 当然要求机器上必须装有 1.5 或者更新版本的 JDK。
- 最好你应该选择一个顺手的 Java 开发环境例如 Eclipse 或者 NetBeans 之类的,可以更方便的编码和调试,虽然我们的最低要求只是一个简单的文本编辑器而已。
|
|
- 编写代码 HelloServer.java 如下
package demo.mina.echo;
import java.io.IOException;
import java.net.InetSocketAddress;
import org.apache.mina.common.*;
import org.apache.mina.transport.socket.nio.*;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
/**
* HelloServer演示程序
* @author liudong (
|
- 编译执行
先不用试着去读懂每一行代码的具体意思,用你顺手的编译器编译 HelloServer.java,如果报错请确认是否已将前面提到的三个 jar 文件添加至类路径中。如果一切顺利接着就可以启动HelloServer 程序,启动后提示:HelloServer started on port 8080
表示启动成功,如果启动失败,问题无外乎是类没找到或者端口占用。如果端口被占用的话,换一个罗,修改 PORT
常量值后再次编译并启动。
- 测试服务器
打开命令行窗口,输入 telnet localhost 8080 后,输入您的英文名或者其他一些乱七八糟的字符后回车再去看看刚启动的服务程序有何反应。我的反应如下:
HelloServer started on port 8080 session open for /127.0.0.1:3023 ===> Message From /127.0.0.1:3023 :hello ===> Message From /127.0.0.1:3023 :hello ===> Message From /127.0.0.1:3023 :liudong ===> Message From /127.0.0.1:3023 :Winter Lau |
好了,一切正常,恭喜你的第一个使用 MINA
开发的网络程序已经成功运行了。
|
|
在介绍架构之前先认识几个接口:
IoAccepter 相当于网络应用程序中的服务器端
IoConnector 相当于客户端
IoSession 当前客户端到服务器端的一个连接实例
IoHandler 业务处理逻辑
IoFilter 过滤器用于悬接通讯层接口与业务层接口
|
|
下图是 MINA
的架构图,
在 图中的模块链中,IoService 便是应用程序的入口,相当于我们前面代码中的 IoAccepter,IoAccepter 便是 IoService 的一个扩展接口。IoService 接口可以用来添加多个 IoFilter,这些 IoFilter 符合责任链模式并由 IoProcessor 线程负责调用。而 IoAccepter 在 ioService 接口的基础上还提供绑定某个通讯端口以及取消绑定的接口。在上面的例子中,我们是这样使用 IoAccepter 的:
IoAcceptor acceptor = new
SocketAcceptor();
|
相当于我们使用了 Socket 通讯方式作为服务的接入,当前版本的 MINA 还提供了除 SocketAccepter 外的基于数据报文通讯的 DatagramAccepter 以及基于管道通讯的 VmPipeAccepter。另外还包括串口通讯接入方式,目前基于串口通讯的接入方式已经在最新测试版的 MINA 中提供。你也可以自行实现 IoService 接口来使用自己的通讯方式。
而在上图中最右端也就是 IoHandler,这便是业务处理模块。相当于前面例子中的 HelloHandler 类。在业务处理类中不需要去关心实际的通讯细节,只管处理客户端传输过来的信息即可。编写 Handler 类就是使用 MINA 开发网络应用程序的重心所在,相当于 MINA 已经帮你处理了所有的通讯方面的细节问题。为了简化 Handler 类,MINA 提供了 IoHandlerAdapter 类,此类仅仅是实现了 IoHandler 接口,但并不做任何处理。
一个 IoHandler 接口中具有如下一些方法(摘自 MINA 的 API 文档):
void exceptionCaught
(IoSession session, Throwable cause) 当接口中其他方法抛出异常未被捕获时触发此方法 |
void messageReceived
(IoSession session, Object message) 当接收到客户端的请求信息后触发此方法. |
void messageSent
(IoSession session, Object message) 当信息已经传送给客户端后触发此方法. |
void sessionClosed
(IoSession session) 当连接被关闭时触发,例如客户端程序意外退出等等. |
void sessionCreated
(IoSession session) 当一个新客户端连接后触发此方法. |
void sessionIdle
(IoSession session, IdleStatus status) 当连接空闲时触发此方法. |
void sessionOpened
(IoSession session) 当连接后打开时触发此方法,一般此方法与 sessionCreated 会被同时触发 |
前面我们提到 IoService 是负责底层通讯接入,而 IoHandler 是负责业务处理的。那么 MINA 架构图中的 IoFilter 作何用途呢?答案是你想作何用途都可以。但是有一个用途却是必须的,那就是作为 IoService 和 IoHandler 之间的桥梁。IoHandler 接口中最重要的一个方法是 messageReceived,这个方法的第二个参数是一个 Object 型的消息,总所周知,Object 是所有 Java 对象的基础,那到底谁来决定这个消息到底是什么类型呢?答案也就在这个 IoFilter 中。在前面使用的例子中,我们添加了一个 IoFilter 是 new ProtocolCodecFilter(new TextLineCodecFactory()),这个过滤器的作用是将来自客户端输入的信息转换成一行行的文本后传递给 IoHandler,因此我们可以在 messageReceived 中直接将 msg 对象强制转换成 String 对象。
而 如果我们不提供任何过滤器的话,那么在 messageReceived 方法中的第二个参数类型就是一个 byte 的缓冲区,对应的类是 org.apache.mina.common.ByteBuffer。虽然你也可以将解析客户端信息放在 IoHandler 中来做,但这并不是推荐的做法,使原来清晰的模型又模糊起来,变得 IoHandler 不只是业务处理,还得充当协议解析的任务。
MINA自身带有一些常用的过滤器,例如LoggingFilter(日志记录)、BlackListFilter(黑名单过滤)、CompressionFilter(压缩)、SSLFilter(SSL加密)等。
|
|
MINA 不仅仅是用来开发网络服务器端应用程序,它一样可以使用 IoConnector 来连接到各种各样的网络服务程序。
通 过本文中 HelloServer 这个例子,我们在惊叹 MINA 可以带来多么大便利的同时,还不得不为其卓越的性能而骄傲,据称使用MINA开发服务器程序的性能已经逼近使用 C/C++ 语言开发的网络服务。作为 MINA 的入门文章,性能问题不在本文讨论范围内。
另外在 MINA 压缩包中附带有不少比 HelloServer 要好得多的例子,通过这些例子可以进一步的了解并掌握 MINA。
-
http://mina.apache.org
MINA 官方网站
-
http://mina.apache.org/features.html
您可以在这里查看关于 MINA 的更多特性
- http://mina.apache.org/testimonials.html 看看别人是如何评价 MINA 的 http://asyncweb.safehaus.org/ 使用 MINA 开发的高性能 WEB 服务器
http://www.ibm.com/developerworks/cn/opensource/os-cn-apmina/
发表评论
-
Mule 例子:以axis做为inbound,传递复杂类型,MuleClient UMOMessage
2009-09-22 16:29 2957这个例子出自:http://raymondhekk.iteye ... -
Axis 客户端代码
2009-09-22 16:16 1810import org.apache.axis.client.C ... -
Mule, AquaLogic ESB 学习阶段性总结 (2009.9.21)
2009-09-21 14:53 1329下面这段文字为转载:http://dragonetzhou.i ... -
Mule 的 Loan Broker 例子的 PPT (经典的ESB的例子)
2009-09-21 14:26 1693http://wiki.springside.org.cn/d ... -
Aqualogic Service Bus 的第三个例子 (消息流进阶)
2009-09-18 17:34 984P87 的那个例子 1、已经发布的Web Servic ... -
Aqualogic Service Bus 的第二个例子 (消息流基础)
2009-09-17 15:15 1191消息流节点类型: 启动节点、路由节点、分支节点、管道对节点 ... -
Aqualogic Service Bus 的第一个例子 (入门)
2009-09-17 11:17 1544本例子出自 《SOA权威指南》 第三章中的那个入门例子。 亲 ... -
Mule Transformers
2009-09-07 14:58 1680Using Transformers [ Configuri ... -
XMPP协议简介
2009-09-07 14:15 1754XMPP协议简介 XMPP(Ext ... -
REST(Representational State Transfer) 介绍
2009-08-31 23:24 1302REST(Representational State Tra ... -
Staged Event Driven Architecture (SEDA) 介绍
2009-08-31 10:29 2433一、前言 二、当前流行的两种并发处理编程模型 ... -
Camel 入门
2009-08-27 18:25 867前段时间和一些朋友聊 ... -
OSGi 入门
2009-08-27 18:15 669还没开始入... -
Mule 的消息路由
2009-08-27 17:53 1205Mule的消息路由 作者 J ... -
Mule 的第二个例子
2009-08-27 15:17 2928这个例子 主要 演示了 web service 作为 inbo ... -
Geronimo入门
2009-08-25 16:23 917http://www.matrix.org.cn/resour ... -
CXF -- JAXB
2009-08-21 10:38 5425JAXB : Java API for XML Bindin ... -
CXF -- JAX-WS
2009-08-21 10:01 1335JAX-WS Java API for XML Web Se ... -
CXF的第一个例子 -- 深入剖析
2009-08-20 20:43 1687Web Service 的 Client 和 Server 端 ... -
CXF的第一个例子 (附 wsdl详解)
2009-08-20 16:52 29961、在eclipse中 创建一个java project。 ...
相关推荐
ApacheMina入门 ApacheMina入门 ApacheMina入门 ApacheMina入门 ApacheMina入门
NULL 博文链接:https://royal2xiaose.iteye.com/blog/1558322
Apache Mina入门 Mina能干什么?先拉出来溜一下:我们用它做两个小程序,一个为服务器,收到客户机的消息 后,就回送给客户机;一个是简单的客户机,一连上服务器,就发一条消息报到,然后将从服务 器接到的消息再...
这个网上一个牛人写的mina入门知识, 里面有基础介绍和项目开发步骤。 入门还是不错的,写的挺详细。 我把项目也加进来了。
NULL 博文链接:https://jzkangta.iteye.com/blog/916292
apache mina的入门完整学习资料,附加中文参考手册。
该文档较好的介绍了,apache mina框架的使用方法。
Apache_MINA_快速入门,开发中用到,自己想学的,可以看看。
本资源包含两个 pdf 文档,一本根据官方最新文档 (http://mina.apache.org/mina-project/userguide/user-guide-toc.html) 整理的 mina_2.0_user_guide_en.pdf,一个中文翻译的 mina_2.0_user_guide_cn.pdf。...
mina是一种高效的互联网网络通信架构,此资料为入门基础。
mina 基础的入门实例,使用maven+jdk1.7进行构建,使用客户端直接可以进行测试
mina框架是一个封装好的nio网络通信框架。做网络通信时,利用它会得到很大的便利。但是很多新手在用它时会觉得无从下手或者难以理解。这篇文件很深入的讲解了它的原理,它的使用方法。
apache mina框架开发高性能的网络通信程序,从入门到精通
Mina入门 2 第一步.下载使用的Jar包 2 第二步.工程创建配置 2 第三步.服务端程序 3 第四步.客户端程序 6 第五步.长连接VS短连接 8 二. Mina基础 9 1.IoService接口 10 2.1.1 类结构 11 2.1.2 应用 12 2.IoFilter...
初学调用webservice的demo,适合初学者入门,资源包括axis2的库文件,以及org.apache.mina等库文件
MINA入门实例,实现长连接,短连接通讯。
Apache_Mina2官方教程翻译 Mina 2.0 工作原理以及配置中的注意事项 Mina 状态机介绍 Mina2.0快速入门与源码剖析
自己整理的一些mina学习资料,内含MINA官方教程(中文版).docx,MINA-2.0.0-M4.chm(英文版),Apache_Mina_Server_2.0中文参考手册V1.0.pdf, 还有mina的包