`
picasso.di
  • 浏览: 51171 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

MINA2官方教程翻译(1) 2.x与1.x的变化

    博客分类:
  • MINA
阅读更多

一、包与命名

 

所有的类和方法严格使用驼峰法命名。


例如SSLFilter被更名为SslFilter,其它很多类也是如此。


所有NIO传输类在命名时增加‘Nio’前缀。


因为NIO并不只是socket/datagram传输的实现,所有‘Nio’前缀加在了所有的NIO传输类上。
改变之前:

SocketAcceptor acceptor = new SocketAcceptor(); 

 

改变之后:

SocketAcceptor acceptor = new NioSocketAcceptor(); 

 

Filter类被重新整理进多重子包内。


随着框架自带的filter实现的数量的增加,所有的filter都被移动到适当的子包中(例如,StreamWriteFilter移至org.apache.mina.filter.stream)。

*.support的所有包被移动到了其父包(或者其他包)中。

为了避免循环依赖,*.support包中的所有类都被移至其父包或者其他包中。你可以在IDE(例如Eclipse)中简单的修正这些包的导入从而避免编译错误。

 

二、Buffers

 

MINA ByteBuffer被重命名为IoBuffer。

 

因为MINA ByteBuffer与JDK中NIO ByteBuffer同名,很多用户发现与其组员沟通时存在很多困难。根据用户的反馈,我们将MINA ByteBuffer重命名为IoBuffer,这不仅使类名称简化,也是类名称更加明晰。

 

放弃Buffer池,默认使用IoBuffer.allocate(int)来分配heap buffer。

 

  • acquire()与release()两个方法将不再是容易发生错误的。如果你愿意,你可以调用free()方法,但这是可选的。请自己承担使用这个方法的风险。
  • 在大多数JVM中,框架内置的IoBuffer性能更加强劲、稳定。

Direct buffer池是MINA早期版本所标榜的众多特性之一。然而根据当今的尺度,在主流的JVM中direct buffers的表现要比heap buffers差。此外,当direct buffer memory的最大值没有被正确设定时,不可预期的OutOfMemoryError也经常出现。

为了使系统内置的IoBuffer性能更加强劲、稳定,Apache MINA项目组将默认的buffer类型由direct改为heap。因为heap buffers并不需要池化,PooledByteBufferAllocator也被移除掉了。由于没有了池的概念,ByteBuffer.acquire() 和 ByteBuffer.release()也被移除掉了。

然而,如果使用的速度太快,分配heap buffers也会成为瓶颈。这是因为分配字节数据如要将所有的元素都置为0,这个操作是消耗内存带宽的。CachedBufferAllocator是针对这种情况使用的,但是在大多数情况下,你还是应该使用默认的SimpleBufferAllocator。

 

三、启动和配置

 

IoService的配置被简化了。

 

在1.x版本中,有很多种方式来配置IoService和它的子接口(例如 IoAcceptor 和 IoConnector)。基本上,有两种配置方法:

在调用bind() 或 connect()时,具体指定一个IoServiceConfig

SocketAcceptor acceptor = new SocketAcceptor(); 
SocketAcceptorConfig myServiceConfig = new SocketAcceptorConfig(); 
myServiceConfig.setReuseAddress(true); 
acceptor.bind(myHandler, myServiceConfig); 

 

使用IoService.defaultConfig属性,此时不需要指定一个IoServiceConfig

SocketAcceptor acceptor = new SocketAcceptor(); 
acceptor.getDefaultConfig().setReuseAddress(true); 
acceptor.bind(new InetSocketAddress(8080), myHandler); 

 

配置IoFilterChain是另一个令人头痛的问题,因为除了IoServiceConfig内的IoFilterChainBuilder外,还有一个全局的IoFilterChainBuilder,这就意味着使用两个IoFilterChainBuilders来配置一个IoFilterChain。大多数用户使用全局的IoFilterChainBuilder来配置IoFilterChain,并且这就足够了。

针对这种复杂情况,MINA 2.0简化了网络应用程序的启动,请比较下面的代码与前面代码的不同

SocketAcceptor acceptor = new SocketAcceptor(); 
acceptor.setReuseAddress(true); 
acceptor.getFilterChain().addLast("myFilter1", new MyFirstFilter()); 
acceptor.getFilterChain().addLast("myFilter2", new MySecondFilter()); 
acceptor.getSessionConfig().setTcpNoDelay(true); 
  
// You can specify more than one addresses to bind to multiple addresses or interface cards. 
acceptor.setLocalAddress(new InetSocketAddress(8080)); 
acceptor.setHandler(myHandler); 
  
acceptor.bind(); 
  
// New API restricts one bind per acceptor, and  you can't bind more than once. 
// The following statement will raise an exception. 
acceptor.bind(); 

 

你也许意识到与Spring框架整合也将变得更加简单。

 

四、线程

 

ThreadModel被移除了。

 

最初引入ThreadModel的概念为的是简化一个IoService预定义的线程模式。然而,配置线程模式却变得非常简单以至于不能引入新的组建。与其易用性相比,线程模式带了更多的混乱。在2.x中,当你需要的时候,你必须明确的增加一个ExecutorFilter。

 

ExecutorFilter使用一个特定的Executor实现来维系事件顺序。

在1.x中,可以使用任意的Executor实现来来维系事件顺序,但2.x提供了两个新的ThreadPoolExecutor实现,OrderedThreadPoolExecutor和UnorderedThreadPoolExecutor,ExecutorFilter维系事件顺序,当以下两种情况:当使用默认构造方法时,ExecutorFilter创建一个OrderedThreadPoolExecutor,或者
明确指明使用OrderedThreadPoolExecutor时
OrderedThreadPoolExecutor 和 UnorderedThreadPoolExecutor内部使用了一些架构来防止发生OutOfMemoryError,所以你应该尽量使用这两个类而不是其他Executor的实现。

 

五、协议编解码

 

DemuxingProtocolCodecFactory被重写了。

 

新增了DemuxingProtocolEncoder和DemuxingProtocolDecoder两个类,DemuxingProtocolCodecFactory只是这两个类的外壳。register() 方法被重命名为addMessageEncoder() 和addMessageDecoder(),这个变化使混合使用多个encoders和decoders变得更加自由。

MessageEncoder接口也发生了改变,MessageEncoder.getMessageTypes()被移除了,当你调用addMessageEncoder(),你只需要指明信息的类型,encoder就可以进行正确的编码了。

 

六、集成

 

JMX集成被重新设计了。

Sping集成被简化了。

七、其他方面的改变

TransportType更名为TransportMetadata。

TransportType改名是因为它的角色是元数据而不仅仅是一种枚举。

IoSessionLogger被重新设计了。

IoSessionLogger现在实现了SLF4J Logger接口,所以你可以像声明简单SLF4J logger实例一样声明它,这个变化使你不必向其他不必要的部分暴露IoSessionLogger对象。另外,在使用MDC时,请考虑使用简单的MdcInjectionFilter,这时IoSessionLogger是没有必要的。

改变之前:

IoSessionLogger.debug(session, ...); 

 

改变之后:

Logger logger = IoSessionLogger.getLogger(session); 
logger.debug(...); 

BroadcastIoSession被合并到IoSession中。

ReadThrottleFilterBuilder被ReadThrottleFilter替代并最终移除。

7
0
分享到:
评论
1 楼 ha397666 2009-10-15  
谢谢博主! 一直在寻找这样的文章 期待你新的作品 再次谢谢 呵呵

相关推荐

    MINA2官方教程翻译

    以下是对MINA2官方教程翻译的部分内容的详细解释: 1. **包和命名的变化**: - 在MINA2中,所有的类和方法遵循驼峰命名规则,例如`SSLFilter`被重命名为`SslFilter`。NIO相关的传输类前缀统一添加了`Nio`,如`...

    mina2.x开发示例

    **Mina2.x开发示例** Apache Mina是一个开源项目,提供了一个高度可扩展的网络通信框架,适用于各种协议,如TCP、UDP和HTTP。它主要用于简化开发高性能、高并发的网络应用程序,如服务器和客户端。在Mina2.x版本中...

    MINA官方教程(中文版).pdf

    I/O处理器需要实现org.apache.mina.core.service.IoHandler接口或继承自org.apache.mina.core.service.IoHandlerAdapter类。 总结来说,Apache MINA通过其简洁的架构和事件驱动的API,为开发者提供了一个强大的工具...

    Mina官方教程_中文版.rar

    《Mina官方教程_中文版》是一份专为学习Mina框架的中文教育资源,它涵盖了Mina框架的基础知识、核心概念以及实际应用技巧。Mina(MinA Socket API)是Apache软件基金会的一个开源项目,主要设计用于构建高性能、高可...

    mina2核心框架

    1. **事件驱动模型**:MINA2采用非阻塞I/O(NIO)模型,通过事件驱动的方式处理网络请求。这种模型允许服务器同时处理多个连接,显著提高了并发性能,尤其是在处理大量短连接时。 2. **协议无关性**:MINA2的设计...

    MINA中文官方教程

    MINA官方教程(中文版).docx文件可能包含了关于如何安装MINA、设置项目、创建基本的服务器和客户端、理解和使用过滤器系统、编码和解码策略、异常处理、性能优化等方面的详细内容。通过学习这个教程,开发者可以...

    mina-core-2.0.0-M1.jar/mina-example-1.0.5.jar

    mina-core-2.0.0-M1.jar/mina-example-1.0.5.jar/slf4j-jdk14-1.6.1.jar/slf4j-log4j12-1.6.1.jar mina 所用jar

    Java springboot 整合mina 框架,nio通讯基础教程,mina框架基础教程.zip

    在这个压缩包中,包含了“Java_NIO基础视频教程”和“MINA视频教程”,你可以通过观看这些教程,了解和学习NIO和Mina的基本用法。同时,“Netty快速入门视频(52im.net).txt”虽然不是直接与Mina相关的,但Netty也是...

    mina2.0教程

    自己整理的一些mina学习资料,内含MINA官方教程(中文版).docx,MINA-2.0.0-M4.chm(英文版),Apache_Mina_Server_2.0中文参考手册V1.0.pdf, 还有mina的包

    mina-core-2.0.0-M1.jar和slf4j

    《mina-core-2.0.0-M1.jar与SLF4J:构建高效网络通信与日志记录》 mina-core-2.0.0-M1.jar是Apache Mina项目的核心库,它是一个高度可扩展的网络通信框架,主要用于构建高性能、高效率的服务端和客户端应用程序。...

    mina2框架+实例教程

    **Mina2框架详解与实例教程** Mina2(全称Apache MINA,Multipurpose Infrastructure for Network Applications)是一个高性能、事件驱动的网络应用程序框架,主要应用于开发网络通信应用,如TCP/IP和UDP/IP协议栈...

    apache-mina-2.0.7 含官方教程

    标题提到的是"apache-mina-2.0.7 含官方教程",这意味着我们正在讨论Apache MINA的2.0.7版本,并且有一个官方教程,这个教程是中文版的,方便中文使用者学习。描述中提及了"apache-mina-2.0.7-bin.zip",这是一个...

    资料_MINA(2、3、4).rar

    MINA2官方教程翻译.pdf Mina2.0快速入门与源码剖析.pdf MINA网络框架和RMI的对比研究.pdf 基于3G网络的移动流媒体服务器的设计与实现.pdf 高性能通信框架及智能主站技术研究.nh MINA类图.doc 等

    apache-mina-2.0.4.rar_apache mina_mina

    1. **Filter Chain**:Mina的核心设计模式之一是过滤器链。每个连接都有一系列过滤器,它们按照顺序处理入站和出站事件。过滤器可以实现特定功能,如数据编码解码、安全验证、性能监控等。 2. **Session**:Session...

    apache-mina-3.0.0-M2-src.zip

    1. **异步I/O模型**:MINA使用Java NIO(New I/O)库,支持非阻塞I/O操作,这提高了处理大量并发连接的能力。通过事件驱动的模式,当数据可用时,MINA会触发相应的处理器,而不是等待数据传输完成。 2. **跨平台...

    mina2技术知识

    MINA2提供了一个抽象层,允许开发者编写与传输协议无关的应用程序,比如TCP/IP和UDP/IP。MINA2的强大之处在于它为开发者提供了异步事件驱动的网络通信框架,免去了处理底层网络编程的复杂性,如多线程管理和数据缓冲...

    apache_mina2收集的教程

    《Apache Mina2官方教程翻译》是Mina2的官方文档中文版,详细介绍了如何使用Mina进行网络编程。这份文档将帮助你理解Mina的核心概念,包括过滤器链、事件驱动模型和I/O多路复用技术。通过学习,你可以了解到如何创建...

    mina2.0 含11个jar包

    mina-core-2.0.0-M6.jar mina-example-2.0.0-M6.jar mina-filter-codec-netty-2.0.0-M6.jar mina-filter-compression-2.0.0-M6.jar mina-integration-beans-2.0.0-M6.jar mina-integration-jmx-2.0.0-M6.jar mina-...

    MINA2 教程 socket

    在这个"MINA2 教程 socket"中,我们将探讨如何使用MINA2来实现服务器与客户端之间的通信,并且支持同时在线连接,以及如何利用`newFixedThreadPool`线程池来优化处理并发连接。 1. **MINA2基本概念**: MINA2的...

Global site tag (gtag.js) - Google Analytics