一、包与命名
所有的类和方法严格使用驼峰法命名。
例如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替代并最终移除。
分享到:
相关推荐
**Mina2.x开发示例** Apache Mina是一个开源项目,提供了一个高度可扩展的网络通信框架,适用于各种协议,如TCP、UDP和HTTP。它主要用于简化开发高性能、高并发的网络应用程序,如服务器和客户端。在Mina2.x版本中...
米娜 apache-mina-2.0.16-bin.zip米娜 apache-mina-2.0.16-bin.zip米娜 apache-mina-2.0.16-bin.zip米娜 apache-mina-2.0.16-bin.zip
mina-core-2.0.4.jar
1. **事件驱动模型**:MINA2采用非阻塞I/O(NIO)模型,通过事件驱动的方式处理网络请求。这种模型允许服务器同时处理多个连接,显著提高了并发性能,尤其是在处理大量短连接时。 2. **协议无关性**:MINA2的设计...
同时,"rxtx-2.0-7pre1-i386-pc-mingw32"和"rxtx-2.1-7r2"是RXTX库的不同版本,RXTX是一个用于Java的串行和并行通信API,它提供了与操作系统底层硬件通信的能力,这在某些需要硬件交互的Mina应用中可能会用到。...
Java mina框架jar包, mina官网下载 mina-core-2.0.7.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
2. **统一的API**:无论是TCP、UDP还是其他协议,Mina都提供了一致的API,简化了开发工作。 3. **过滤器架构**:通过过滤器链,开发者可以轻松添加中间件组件,实现数据编码、解码、安全、压缩等功能。 4. **丰富的...
Mina的核心概念之一是`IoService`,它是应用程序与网络交互的入口。`IoService`有两个扩展接口:`IoAcceptor`和`IoConnector`,分别用于服务器端和客户端。 - **IoAcceptor**:负责监听特定端口的连接请求,并创建...
log4j.appender.MINA.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %c{1} %x - %m%n log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=./log/minademos.log ...
#### 四、Mina 2.0 与 Mina 1.x 的区别 虽然Mina 1.x系列已经非常成熟和稳定,但2.0版本在设计上做出了较大的改进,以适应更高的性能要求和更复杂的业务场景。Mina 2.0引入了更多现代化的特性,例如: - 更加灵活的...
1. **Filter Chain**:Mina的核心设计模式之一是过滤器链。每个连接都有一系列过滤器,它们按照顺序处理入站和出站事件。过滤器可以实现特定功能,如数据编码解码、安全验证、性能监控等。 2. **Session**:Session...
1. MINA框架基础: MINA框架提供了一种事件驱动的非阻塞I/O模型,这种模型允许服务器处理大量的并发连接,同时保持较低的内存占用。它通过使用NIO(Non-blocking Input/Output)技术,使得服务器在等待数据到来时...
1. **异步事件驱动**:MINA采用非阻塞I/O模型,通过事件驱动的方式处理网络请求,极大地提高了系统的并发处理能力。在高并发场景下,非阻塞I/O相比阻塞I/O能够更有效地利用系统资源。 2. **协议无关性**:MINA支持...
标签"mina"、"mina-2.0.0-M3.zip"、"mina 2.0"强调了这个压缩包与Apache MINA项目的关系,以及其版本信息。MINA 2.0是一个重要的版本,相对于早期版本,它可能引入了更多的改进和新特性。 在压缩包文件名称列表中,...
1. **Apache Mina简介** Apache Mina是一个开源项目,它提供了Java API来处理网络通信,如TCP/IP和UDP/IP协议。它的设计目标是提供一个可扩展且高效的框架,使得开发者可以专注于业务逻辑,而不是底层网络编程的...
mina-core-2.0.2.jar mina-core-2.0.2.jar
org.apache.mina.core.buffer.IoBuffer mina core 包
apache-mina-2.0.7-bin.zip,apache-mina-2.0.7-src.zip,log4j-1.2.17.zip,slf4j-api-1.6.6.jar,slf4j-api-1.6.6-sources.jar,slf4j-log4j12-1.6.6.jar,mina-example-2.0.7.jar,mina-example-2.0.7-sources....
1. **IoSession**:MINA 中的核心概念,它代表了服务端与客户端之间的一个连接。IoSession 存储了连接状态,包括读写事件、缓冲区、过滤器链等信息。 2. **FilterChain**:MINA 使用过滤器链模型来处理网络通信中的...