一、包与类名。

1、所有类和方法严格使用驼峰法命名。例:SSLFilter 更名为 SslFilter。NIO传输类在命名时增加 Nio 前缀。因为NIO 并不是 socket/datagram 传输的实现,NIO 的所有传输类前缀增加 Nio 。之前Java代码:

  1. SocketAcceptor acceptor = new SocketAcceptor();

修改之后的代码:

  1. 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

  1. acceptor = new SocketAcceptor();
  2. SocketAcceptorConfig cfg = new SocketAcceptorConfig();
  3. cfg.getFilterChain().addLast( "codec", new ProtocolCodecFilter(MinaUAEncoder.class,MinaUADecoder.class));
  4. acceptor.bind( new InetSocketAddress(address, port), new DirectClientSessionHandler(), cfg);

或者 IoService.defaultConfig 属性,此时不需要指定 IoServiceConfig

  1. acceptor = new SocketAcceptor();
  2. acceptor.getDefaultConfig().setReuseAddress(true);
  3. acceptor.bind(new InetSocketAddress("127.0.0.1", 8888), myHandler);

Mina2 简化了网络应用程序的启动,

  1. //Create acceptor
  2. IoAcceptor acceptor = new NioSocketAcceptor();
  3. acceptor.getFilterChain().addLast("logger", new LoggingFilter());
  4. acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
  5. acceptor.setHandler(new HelloWorldServerHandler());
  6. //configurate the buffer size and the iddle time
  7. acceptor.getSessionConfig().setReadBufferSize(2048);
  8. acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
  9. try {
  10. acceptor.bind(new InetSocketAddress(PORT));
  11. } catch (IOException e) {
  12. e.printStackTrace();
  13. }

四、线程。

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的更多相关文章

  1. 【原创】NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示

    前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty ...

  2. 【原创】NIO框架入门(四):Android与MINA2、Netty4的跨平台UDP双向通信实战

    概述 本文演示的是一个Android客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo. 当前由于NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能. ...

  3. 【原创】NIO框架入门(三):iOS与MINA2、Netty4的跨平台UDP双向通信实战

    前言 本文将演示一个iOS客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo.服务端将分别用MINA2和Netty4进行实现,而通信时服务端你只需选其一就行了.同 ...

  4. 移动端IM系统的协议选型:UDP还是TCP?

    1.前言 对于有过网络编程经验的开发者来说,使用何种数据传输层协议来实现数据的通信,是个非常基础的问题,它涉及到你的第一行代码该如何编写. 从PC时代的IM开始,IM开发者就在为数据传输协议的选型争论 ...

  5. 【原创】NIO框架入门(一):服务端基于Netty4的UDP双向通信Demo演示

    申明:本文由作者基于日常实践整理,希望对初次接触MINA.Netty的人有所启发.如需与作者交流,见文签名,互相学习. 学习交流 更多学习资料:点此进入 推荐 移动端即时通讯交流: 215891622 ...

  6. mina2

      远程通信 Mina2 学习笔记 作者:李少华 邮箱:xiaosanshaoli@126.com QQ:305409913 2010-12-23   初稿 引言... 1 一.       Mina ...

  7. mina2.0 spring

    Apache MINA是一个网络应用程序框架,它可以帮助用户开发的高性能.高扩展性的网络应用程序.它提供了一个抽象的事件驱动的异步API在不同传输如TCP/IP和UDP/IP通过java NIO. A ...

  8. MINA2.0用户手册中文版

    MINA2.0用户手册中文版--第一章 MINA2.0入门 MINA2.0用户手册中文版--第二章 第一节 MINA应用程序架构 MINA2.0用户手册中文版--第二章 第二节 TCP服务端实例 MI ...

  9. [转帖]技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解

    技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解    http://www.52im.net/thread-1309-1-1.html   本文来自腾讯资深研发工程师罗成的技术分享, ...

  10. apache mina2.0源码解析(一)

    apache mina是一个基于java nio的网络通信框架,为TCP UDP ARP等协议提供了一致的编程模型:其源码结构展示了优秀的设计案例,可以为我们的编程事业提供参考. 依照惯例,首先搭建a ...

随机推荐

  1. AtCoder Grand Contest 031 B - Reversi

    https://atcoder.jp/contests/agc031/tasks/agc031_b B - Reversi Time Limit: 2 sec / Memory Limit: 1024 ...

  2. Java中break和continue跳出指定循环

    https://www.cnblogs.com/miys/p/b7f6a463bc58785d74a8a7fccd1f1243.html 在Java中,break和continue可以跳出指定循环,在 ...

  3. Math.floor(-8.5)=多少?

    Math.floor()   表示向下取整,返回double类型   (floor---地板)  Math.ceil()   表示向上取整,返回double类型    (ceil---天花板)  Ma ...

  4. LeetCode - Cut Off Trees for Golf Event

    You are asked to cut off trees in a forest for a golf event. The forest is represented as a non-nega ...

  5. linux(kali,centos)安装vm及其提示缺少c头文件解决方法

    我电脑系统是kali最新版 首先去官网下一个vm安装包,给个直达网址 http://www.vmware.com/cn/products/workstation/workstation-evaluat ...

  6. <--------------------------Java继承及抽象类------------------------------>

    1 继承的好处   关键词-->extends 1.1.继承的出现提高了代码的复用性,提高软件开发效率. 1.2.继承的出现让类与类之间产生了关系,提供了多态的前提. 2 继承的注意事项 *a: ...

  7. Visual Studio项目的生成事件代码

    我们打开vs的项目属性可以看到有生成事件,如下图: 可以看到有两块空白区域,这个空白区域可以让我们写代码或脚本来处理编译生成前后的时候,处理一些事情,今天就简单的来说说这两块. 生成前事件命令行 我想 ...

  8. Anaconda详细安装使用教程

    版权声明:本文为博主原创文章,欢迎大家转载,但是要注明我的文章地址. https://blog.csdn.net/program_developer/article/details/79677557 ...

  9. golang bug Unknown load command 0x32 (50)

    问题 编译文件时报错: /usr/local/go/pkg/tool/darwin_amd64/link: /usr/local/go/pkg/tool/darwin_amd64/link: comb ...

  10. Java利用hanlp完成语句相似度分析的案例详解

    分享一篇hanlp分词工具使用的小案例,即利用hanlp分词工具分析两个中文语句的相似度的案例.供大家一起学习参考! 在做考试系统需求时,后台题库系统提供录入题目的功能.在录入题目的时候,由于题目来源 ...