Mina2 udp--zhengli
一、包与类名。
1、所有类和方法严格使用驼峰法命名。例:SSLFilter 更名为 SslFilter。NIO传输类在命名时增加 Nio 前缀。因为NIO 并不是 socket/datagram 传输的实现,NIO 的所有传输类前缀增加 Nio 。之前Java代码:
- SocketAcceptor acceptor = new SocketAcceptor();
修改之后的代码:
- SocketAcceptor acceptor = new NioSocketAcceptor();
2、Filter 类被重新整理进多重子包内。例如,StreamWriteFilter 被移动到 org.apache.mina.filter.stream ,*.support 的所有包被移动到其父包中。
二、Buffers。
因为MINA ByteBuffer 与JDK中NIO ByteBuffer 同名,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 也经常出现,所以新的版本 buffer类型由 direct 改为 heap 。heap buffers 不需要池化,PooledBufferAllocator 也被除掉了,相应的ByteBuffer.acquire() release()也被除掉了。 但是如果使用的速度太快,分配 heap buffers也会成为瓶颈,因为分配字节数据要将所有的元素都置为0,这个操作消耗内存带宽。 CachedBufferAllocator 是针对这种情况使用的,但是大多数情况,还是使用默认的 SimpleBufferAllocator 。
三、启动与配置。
1、IoService 配置简化,1.x版本中邮多种方式配置IoService 和它的子接口 IoAcceptor 和 IoConnector 两种方法:在调用bind() 或 connect() 时,具体指定一个 ioServiceConfig
- acceptor = new SocketAcceptor();
- SocketAcceptorConfig cfg = new SocketAcceptorConfig();
- cfg.getFilterChain().addLast( "codec", new ProtocolCodecFilter(MinaUAEncoder.class,MinaUADecoder.class));
- acceptor.bind( new InetSocketAddress(address, port), new DirectClientSessionHandler(), cfg);
或者 IoService.defaultConfig 属性,此时不需要指定 IoServiceConfig
- acceptor = new SocketAcceptor();
- acceptor.getDefaultConfig().setReuseAddress(true);
- acceptor.bind(new InetSocketAddress("127.0.0.1", 8888), myHandler);
Mina2 简化了网络应用程序的启动,
- //Create acceptor
- 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 HelloWorldServerHandler());
- //configurate the buffer size and the iddle time
- acceptor.getSessionConfig().setReadBufferSize(2048);
- acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
- try {
- acceptor.bind(new InetSocketAddress(PORT));
- } catch (IOException e) {
- e.printStackTrace();
- }
四、线程。
ThreadModel 被移除了,最初引入ThreadModel 是为了简化 ioService 预定义的线程模式,配置线程模式却变得非常简单以至于不能引入新的组件,与其易用性相比,线程模式带来了更多的混乱。
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集成被重新设计。
spring 集成被简化。
七、其他。
TransportType 更名为 TransportMetadata
TransportType 改名是因为它的角色是元数据而不仅仅是一种枚举。
IoSessionLogger 被重新设计。
IoSessionLogger 实现了 SLF4Logger接口,所以可以像声明简单SLF4Logger实例一样声明它,这个变化使你不必向其他不必要的部分暴露 IoSessionLogger 对象。在使用 MDC 时,请考虑使用简单的 MdclnjectionFilter
Mina2 udp--zhengli的更多相关文章
- 【原创】NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示
前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty ...
- 【原创】NIO框架入门(四):Android与MINA2、Netty4的跨平台UDP双向通信实战
概述 本文演示的是一个Android客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo. 当前由于NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能. ...
- 【原创】NIO框架入门(三):iOS与MINA2、Netty4的跨平台UDP双向通信实战
前言 本文将演示一个iOS客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo.服务端将分别用MINA2和Netty4进行实现,而通信时服务端你只需选其一就行了.同 ...
- 移动端IM系统的协议选型:UDP还是TCP?
1.前言 对于有过网络编程经验的开发者来说,使用何种数据传输层协议来实现数据的通信,是个非常基础的问题,它涉及到你的第一行代码该如何编写. 从PC时代的IM开始,IM开发者就在为数据传输协议的选型争论 ...
- 【原创】NIO框架入门(一):服务端基于Netty4的UDP双向通信Demo演示
申明:本文由作者基于日常实践整理,希望对初次接触MINA.Netty的人有所启发.如需与作者交流,见文签名,互相学习. 学习交流 更多学习资料:点此进入 推荐 移动端即时通讯交流: 215891622 ...
- mina2
远程通信 Mina2 学习笔记 作者:李少华 邮箱:xiaosanshaoli@126.com QQ:305409913 2010-12-23 初稿 引言... 1 一. Mina ...
- mina2.0 spring
Apache MINA是一个网络应用程序框架,它可以帮助用户开发的高性能.高扩展性的网络应用程序.它提供了一个抽象的事件驱动的异步API在不同传输如TCP/IP和UDP/IP通过java NIO. A ...
- MINA2.0用户手册中文版
MINA2.0用户手册中文版--第一章 MINA2.0入门 MINA2.0用户手册中文版--第二章 第一节 MINA应用程序架构 MINA2.0用户手册中文版--第二章 第二节 TCP服务端实例 MI ...
- [转帖]技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解
技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解 http://www.52im.net/thread-1309-1-1.html 本文来自腾讯资深研发工程师罗成的技术分享, ...
- apache mina2.0源码解析(一)
apache mina是一个基于java nio的网络通信框架,为TCP UDP ARP等协议提供了一致的编程模型:其源码结构展示了优秀的设计案例,可以为我们的编程事业提供参考. 依照惯例,首先搭建a ...
随机推荐
- HPU第四次积分赛-L:A Winged Steed(完全背包)
A Winged Steed 描述 有n种千里马,每一种都有若干匹,第i种马的颜值ai,价格di.现有m个牧马人要去挑选千里马,每一位牧马人对马的颜值都有要求:{所选马的颜值总和} ⩾Ai.现在 ...
- opencv学习记录
#include<iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui ...
- Python基础( )
一. 文件修改 f = open("yesterday.txt",'r') f1 = open("yesterday2.txt",'w') for line i ...
- cdcq的独立博客上线辣!-> http://cdcq.coding.me/blog/
cdcq的独立博客上线辣!-> http://cdcq.coding.me/blog/ 这个博客会逐渐停更 独立博客被硬盘保护吃掉了,直到省选前独立博客应该不会再上线 (如果没进队就永远不会上线 ...
- LOJ2135 「ZJOI2015」幻想乡战略游戏
题意 题目描述 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂商把游戏的地图越做越大,以至于幽香一眼根本看不过来,更别说和 ...
- LG4213 【【模板】杜教筛(Sum)】
sum\(\mu\)求法 设 \[S(n)=\sum_{i=1}^n \mu(i)\] 回顾公式 \[\sum_{d|n}\mu(d)=[n=1]\] 对\(n\)求和 \[\sum_{i=1}^n\ ...
- MySQL InnoDB Engine--缓冲器数据交换
通常情况下,缓冲池无法将整个数据库所有数据都进行缓冲,而且不同数据的访问频率不一样,有些数据会被频繁访问,而有些数据可能数月不会被访问一次,因此数据库使用最近最少使用LRU latest Recent ...
- JavaScript 中 this的指向
this 一方面便利了让大家在JS开发当, 但是另一方面让开发者头痛的是不清楚this 指代什么. 指向全局Window: <script> console.log(this); < ...
- day 31 进程的其他方法 进程锁 进程队列
一.进程的其他方法 1. .name 进程名 (可指定) 2. .pid 进程号 3. os.getpid 在什么位置就是什么的进程号 4. .is ...
- 我发起了一个 .Net 平台上的 产生式编程 开源项目 GP.Net
大家好 , 我发起了一个 .Net 平台上的 产生式编程 开源项目 GP.Net . 我们可以先看看一个网友的 代码生成器 项目 : <.Net 代码生成器 for PostgreSql> ...