- 浏览: 1017579 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (826)
- 硬件 (8)
- 软件 (24)
- 软件工程 (34)
- JAVA (229)
- C/C++/C# (77)
- JavaScript (8)
- PHP (1)
- Ruby (3)
- MySQL (14)
- 数据库 (19)
- 心情记事 (12)
- 团队管理 (19)
- Hadoop (1)
- spring (22)
- mybatis(ibatis) (7)
- tomcat (16)
- velocity (0)
- 系统架构 (6)
- JMX (8)
- proxool (1)
- 开发工具 (16)
- python (10)
- JVM (27)
- servlet (5)
- JMS (26)
- ant (2)
- 设计模式 (5)
- 智力题 (2)
- 面试题收集 (1)
- 孙子兵法 (16)
- 测试 (1)
- 数据结构 (7)
- 算法 (22)
- Android (11)
- 汽车驾驶 (1)
- lucene (1)
- memcache (12)
- 技术架构 (7)
- OTP-Erlang (7)
- memcached (17)
- redis (20)
- 浏览器插件 (3)
- sqlite (3)
- Heritrix (9)
- Java线程 (1)
- scala (0)
- Mina (6)
- 汇编 (2)
- Netty (15)
- libevent (0)
- CentOS (12)
- mongod (5)
- mac os (0)
最新评论
-
kingasdfg:
你这里面存在一个错误添加多个任务 应该是这样的 /** * ...
Quartz的任务的临时启动和暂停和恢复【转】 -
kyzeng:
纠正一个错误,long型对应的符号是J,不是L。
Jni中C++和Java的参数传递 -
zhaohaolin:
抱歉,兄弟,只是留下作记录,方便学习,如果觉得资料不好,可以到 ...
netty的个人使用心得【转】 -
cccoooccooco:
谢谢!自己一直以为虚机得使用网线才可以与主机连接呢。。
主机网卡无网线连接与虚拟机通信 -
yuqilin001:
要转别人的东西,请转清楚点嘛,少了这么多类,误人子弟
netty的个人使用心得【转】
Apache Mina 是一个能够帮助用户开发高性能和高伸缩性网络应用程序的框架。它通过 Javanio 技术基于 TCP/IP 和 UDP/IP 协议提供了抽象的、事件驱动的、异步的 API 。
如下的特性:
1 、 基于 Java nio 的 TCP/IP 和 UDP/IP 实现
基于 RXTX 的串口通信( RS232 )
VM 通道通信
2 、通过 filter 接口实现扩展,类似于 Servlet filters
3 、 low-level (底层)和 high-level (高级封装)的 api :
low-level :使用 ByteBuffers
High-level :使用自定义的消息对象和解码器
4 、 Highly customizable (易用的)线程模式( MINA2.0 已经禁用线程模型了):
单线程
线程池
多个线程池
5 、基于 java5 SSLEngine 的 SSL 、 TLS 、 StartTLS 支持
6 、负载平衡
7 、使用 mock 进行单元测试
8 、 jmx 整合
9 、基于 StreamIoHandler 的流式 I/O 支持
10 、 IOC 容器的整合: Spring 、 PicoContainer
11 、平滑迁移到 Netty 平台
在 2.0.x 中对 Spring 等 IoC 的集成进行了简化,添加了基于 OGNL 的 JMX 远程管理支持,使用基于 Java Annotation 的全新 API 大大简化了状态机编程,新的基于 Apache APR 的基础 I/O 组件促进了进一步的效率提升(据官方评测, APR 的效率较之 Sun NIO 要高出约 10% )。
异步 I/O 模型大体上可以分为两种,反应式( Reactive )模型和前摄式( Proactive )模型:
传统的 select / epoll / kqueue 模型,以及 Java NIO 模型,都是典型的反应式模型,即应用代码对 I/O 描述符进行注册,然后等待 I/O 事件。当某个或某些 I/O 描述符所对应的 I/O 设备上产生 I/O 事件(可读、可写、异常等)时,系统将发出通知,于是应用便有机会进行 I/O 操作并避免阻塞。由于在反应式模型中应用代码需要根据相应的事件类型采取不同的动作,最常见的结构便是嵌套的 if {...} else {...} 或 switch ,并常常需要结合状态机来完成复杂的逻辑。
前摄式模型则恰恰相反。在前摄式模型中,应用代码主动地投递异步操作而不管 I/O 设备当前是否可读或可写。投递的异步 I/O 操作被系统接管,应用代码也并不阻塞在该操作上,而是指定一个回调函数并继续自己的应用逻辑。当该异步操作完成时,系统将发起通知并调用应用代码指定的回调函数。在前摄式模型中,程序逻辑由各个回调函数串联起来:异步操作 A 的回调发起异步操作 B , B 的回调再发起异步操作 C ,以此往复。 Mina 便是一个前摄式的异步 I/O 框架。
前摄式模型相较于反射式模型往往更加难以编程。然而在具有原生异步 I/O 支持的操作系统中(例如支持 IO Completion Port 的 Win32 系统),采用前摄式模型往往可以取得比反应式模型更佳的效率。在没有原生异步 I/O 支持的系统中,也可以使用传统的反应式 API 对前摄式模型予以模拟。在现代的软硬件系统中,使用 epoll 和 kqueue 的前摄式模型实现同样可以轻松解决 C10K 问题。前摄式模型的一个显著优势是在实现复杂逻辑的时候不需要借助于状态机。因为状态机已经隐含在由回调串联起来的异步操作链当中了。可以参考 Boost.Asio ,这是一个相当优秀的跨平台 C++ 前摄式 I/O 模型实现。
参考:(http://rhythm-zju.blog.163.com/blog/static/31004200801504351529 )
下图是 在图中的模块链中,IoService 便是应用程序的入口,相当于我们前面代码中的 IoAccepter,IoAccepter 便是
IoService 的一个扩展接口。IoService 接口可以用来添加多个 IoFilter,这些 IoFilter 符合责任链模式并由
IoProcessor 线程负责调用。而 IoAccepter 在 ioService
接口的基础上还提供绑定某个通讯端口以及取消绑定的接口。在上面的例子中,我们是这样使用 IoAccepter 的: 相当于我们使用了 Socket 通讯方式作为服务的接入,当前版本的 MINA 还提供了除 SocketAccepter
外的基于数据报文通讯的 DatagramAccepter 以及基于管道通讯的
VmPipeAccepter。另外还包括串口通讯接入方式,目前基于串口通讯的接入方式已经在最新测试版的 MINA 中提供。你也可以自行实现
IoService 接口来使用自己的通讯方式。 而在上图中最右端也就是 IoHandler,这便是业务处理模块。相当于前面例子中的 HelloHandler
类。在业务处理类中不需要去关心实际的通讯细节,只管处理客户端传输过来的信息即可。编写 Handler 类就是使用 MINA
开发网络应用程序的重心所在,相当于 MINA 已经帮你处理了所有的通讯方面的细节问题。为了简化 Handler 类,MINA 提供了
IoHandlerAdapter 类,此类仅仅是实现了 IoHandler 接口,但并不做任何处理。 一个 IoHandler 接口中具有如下一些方法(摘自 MINA 的 API 文档): 前面我们提到 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加密)等。 参考:http://hi.baidu.com/jouby/blog/item/1e2a7507172a46c87b8947b3.html
MINA
的架构图,
IoAcceptor acceptor = new
SocketAcceptor();
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 会被同时触发
发表评论
-
调试jdk中的源码,查看jdk局部变量
2013-06-15 23:30 1055调试jdk中的源码,查看jdk局部变量 2012-04 ... -
Eclipse快捷键 10个最有用的快捷键<转>
2013-04-11 23:28 1082Eclipse中10个最有用的快捷键组合 一个Eclip ... -
Lucene 3.6 中文分词、分页查询、高亮显示等
2012-12-09 23:35 18241、准备工作 下载lucene 3.6.1 : htt ... -
Maven实战(九)——打包的技巧(转)
2012-10-12 00:41 941“打包“这个词听起 ... -
基于Maven的web工程如何配置嵌入式Jetty Server开发调试环境(转)
2012-10-12 00:28 9421、首先在web工程的POM文件里添加依赖jar包如下: ... -
轻轻松松学Solr(1)--概述及安装[转]
2012-09-18 14:59 998概述 这段时间对企 ... -
分析Netty工作流程[转]
2012-09-04 19:02 893下面以Netty中Echo的例 ... -
让eclipse在ubuntu下面好看一点
2012-03-27 10:17 925<p> </p> <h1 cla ... -
zookeeper安装和应用场合(名字,配置,锁,队列,集群管理)[转]
2012-01-12 17:59 1653安装和配置详解 本文 ... -
Jakarta-Common-BeanUtils使用笔记[转]
2012-01-10 14:13 1160Jakarta-Common-BeanUtils ... -
一个关于Java Thread wait(),notify()的实用例【转】
2012-01-07 16:05 1024///// // ProducerConsume ... -
Java基础:Java中的 assert 关键字解析【转】
2012-01-06 19:50 1066J2SE 1.4在语言上提供了 ... -
一篇不错的讲解Java异常的文章(转载)----感觉很不错,读了以后很有启发[转]
2012-01-06 15:02 1272六种异常处理的陋习 ... -
如何解决HP QC(Quality Center)在Windows 7下不能工作的问题
2011-12-26 10:48 1588HP QC(Quantity Center) 是一款不错的测 ... -
JAVA读写文件,中文乱码 【转】
2011-12-19 23:43 2123最近在做HTML静态生成,需要从硬盘上把模版文件的内容读出来。 ... -
Java 6 JVM参数选项大全(中文版)【转】
2011-12-19 19:51 974Java 6 JVM参数选项大全(中文版) 作者 ... -
使用assembly plugin实现自定义打包【转】
2011-12-13 01:58 975在上一篇文章中,讨论到在对maven的机制不熟悉的情况下,为了 ... -
使用maven ant task实现非标准打包[转]
2011-12-13 01:56 1050maven很强大,但是总有些事情干起来不是得心应手,没有使用a ... -
Java日期转换SimpleDateFormat格式大全【转】
2011-12-08 20:22 131924小时制时间 显示: public clas ... -
使用Spring的表单标签库
2011-11-22 20:08 107813.9. 使用Spring的 ...
相关推荐
MINA2.0 用户手册中文随笔翻译 MINA 是一个基于 NIO(Non-Blocking I/O)的网络框架,提供了统一的接口来处理 TCP、UDP 和其他机制的通信。MINA 的主要特点是能够处理大量的 socket 连接,并提供了一个高层接口来...
Apache Mina通信原理Apache Mina通信原理
MINA2官方教程翻译 比较全面,比1.0版本先进多了
Apache Mina是一个开源的网络通信应用框架,主要应用于Java平台,它为高性能、高可用性的网络应用程序提供了基础架构。...通过深入理解并熟练运用Mina的高级特性,我们可以构建出高效、可靠的网络应用。
### 1.1 Mina的核心特性 - **事件驱动**:Mina采用事件驱动机制,这使得开发者能够更加关注于业务逻辑而非网络细节。 - **异步操作**:利用Java NIO作为底层支持,Mina提供了非阻塞的I/O处理方式,极大地提高了系统...
Apache Mina是一个高性能的网络应用程序框架,它简化了网络编程,使得开发者可以更加容易地创建可伸缩的网络应用程序。Mina支持异步I/O操作,适用于需要大量并发连接的应用,比如聊天服务器、邮件服务器、游戏服务器...
本文将深入探讨mina编解码器的工作原理,提供一个典型编解码器的示例,并解析其代码。 1. **mina框架基础** - Mina提供了一个高效的、事件驱动的网络应用程序框架,简化了网络编程,尤其是TCP和UDP通信。 - 它...
Apache Mina是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个"apache-mina-2.0.4.rar"压缩包包含的是Apache Mina 2.0.4版本的源代码,是深入理解和定制Mina的...
需要注意的是,由于Android系统特性,如电量管理、网络切换等,可能需要额外处理这些情况,以确保连接的健壮性。 在提供的文件"minaConnect"中,可能包含了使用Mina实现上述功能的相关代码示例和配置。通过分析这些...
MINA (Java IO Network Application Framework) 是一个由Apache软件基金会开发的开源网络通信框架,主要应用于构建高性能、高可用性的网络服务器。这个压缩包包含了MINA API文档、自学手册以及开发指南,对于学习和...
MINA的关键特性包括: - **事件驱动**:MINA采用事件驱动模型,通过监听和处理I/O事件来实现异步通信。 - **可扩展**:MINA设计为高度模块化,可以轻松地扩展以适应各种协议和传输机制。 - **高性能**:利用Java NIO...
深入研究Mina的源码可以帮助我们理解其内部工作原理,如事件驱动模型的实现、过滤器链的传递机制以及NIO的封装等。同时,源码中的各种设计模式和最佳实践也值得借鉴。 **应用场景:** Mina广泛应用于需要高效网络...
Mina的异步模型可以更好地适应移动网络的不稳定特性,减少资源消耗,提高服务的稳定性和响应速度。 使用Mina构建推送服务时,开发者可以创建一个服务器端应用,监听特定端口,当收到新的推送消息时,通过过滤器链...
在IT行业中,网络通信是软件开发中的重要组成部分,特别是在分布式系统和实时数据交换的应用中。Mina和Socket是两种常见的网络通信框架和技术,它们在...理解这两者的原理和用法,对于提升Java网络编程技能至关重要。
本话题将深入探讨如何利用Mina进行文件及字符串的传输。 标题中的"Mina文件及字符串传输"指的是使用Apache Mina框架进行数据交互的过程,包括发送和接收字符串请求以及传输文件。这一过程通常涉及到网络编程中的TCP...
Mina的核心特性包括: 1. **异步I/O模型**:Mina基于NIO(Non-blocking I/O)实现,提供非阻塞的读写操作,这使得系统能够处理大量并发连接,提高系统的吞吐量。 2. **协议无关性**:Mina支持多种网络协议,如TCP/...
博客文章“mina用法及用到的包”可能详细讲述了这些概念,并通过实例展示了如何配置和使用MINA,以及如何根据项目需求选择和利用相关的MINA包。可能还会讨论一些最佳实践,如何优化MINA应用,以及如何解决开发中遇到...
总结来说,本教程将引导你从理论到实践,掌握Java NIO的基本原理,理解Mina框架的使用,以及如何在SpringBoot环境中整合Mina实现高效的网络通信。通过这些知识的学习,你将具备开发高并发、高性能网络应用的能力。