ImageVerifierCode 换一换
格式:DOCX , 页数:40 ,大小:127.18KB ,
资源ID:10592004      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10592004.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(MINA2官方教程翻译.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

MINA2官方教程翻译.docx

1、MINA2官方教程翻译MINA2官方教程翻译(1) 2.x与1.x的变化文章分类:Java编程一、包与命名所有的类和方法严格使用驼峰法命名。例如SSLFilter被更名为SslFilter,其它很多类也是如此。所有NIO传输类在命名时增加Nio前缀。因为NIO并不只是socket/datagram传输的实现,所有Nio前缀加在了所有的NIO传输类上。改变之前:Java代码1. SocketAcceptoracceptor=newSocketAcceptor();改变之后:Java代码1. SocketAcceptoracceptor=newNioSocketAcceptor();Filter类

2、被重新整理进多重子包内。随着框架自带的filter实现的数量的增加,所有的filter都被移动到适当的子包中(例如,StreamWriteFilter移至org.apache.mina.filter.stream)。*.support的所有包被移动到了其父包(或者其他包)中。为了避免循环依赖,*.support包中的所有类都被移至其父包或者其他包中。你可以在IDE(例如Eclipse)中简单的修正这些包的导入从而避免编译错误。二、BuffersMINA ByteBuffer被重命名为IoBuffer。因为MINA ByteBuffer与JDK中NIO ByteBuffer同名,很多用户发现与其

3、组员沟通时存在很多困难。根据用户的反馈,我们将MINA ByteBuffer重命名为IoBuffer,这不仅使类名称简化,也是类名称更加明晰。放弃Buffer池,默认使用IoBuffer.allocate(int)来分配heap buffer。 acquire()与release()两个方法将不再是容易发生错误的。如果你愿意,你可以调用free()方法,但这是可选的。请自己承担使用这个方法的风险。 在大多数JVM中,框架内置的IoBuffer性能更加强劲、稳定。Direct buffer池是MINA早期版本所标榜的众多特性之一。然而根据当今的尺度,在主流的JVM中direct buffers的

4、表现要比heap buffers差。此外,当direct buffer memory的最大值没有被正确设定时,不可预期的OutOfMemoryError也经常出现。为了使系统内置的IoBuffer性能更加强劲、稳定,Apache MINA项目组将默认的buffer类型由direct改为heap。因为heap buffers并不需要池化,PooledByteBufferAllocator也被移除掉了。由于没有了池的概念,ByteBuffer.acquire() 和 ByteBuffer.release()也被移除掉了。然而,如果使用的速度太快,分配heap buffers也会成为瓶颈。这是因为分

5、配字节数据如要将所有的元素都置为0,这个操作是消耗内存带宽的。CachedBufferAllocator是针对这种情况使用的,但是在大多数情况下,你还是应该使用默认的SimpleBufferAllocator。三、启动和配置IoService的配置被简化了。在1.x版本中,有很多种方式来配置IoService和它的子接口(例如 IoAcceptor 和 IoConnector)。基本上,有两种配置方法:在调用bind() 或 connect()时,具体指定一个IoServiceConfigJava代码1. SocketAcceptoracceptor=newSocketAcceptor();2

6、. SocketAcceptorConfigmyServiceConfig=newSocketAcceptorConfig();3. myServiceConfig.setReuseAddress(true);4. acceptor.bind(myHandler,myServiceConfig);使用IoService.defaultConfig属性,此时不需要指定一个IoServiceConfigJava代码1. SocketAcceptoracceptor=newSocketAcceptor();2. acceptor.getDefaultConfig().setReuseAddress(

7、true);3. acceptor.bind(newInetSocketAddress(8080),myHandler);配置IoFilterChain是另一个令人头痛的问题,因为除了IoServiceConfig内的IoFilterChainBuilder外,还有一个全局的IoFilterChainBuilder,这就意味着使用两个IoFilterChainBuilders来配置一个IoFilterChain。大多数用户使用全局的IoFilterChainBuilder来配置IoFilterChain,并且这就足够了。针对这种复杂情况,MINA 2.0简化了网络应用程序的启动,请比较下面的代

8、码与前面代码的不同Java代码1. SocketAcceptoracceptor=newSocketAcceptor();2. acceptor.setReuseAddress(true);3. acceptor.getFilterChain().addLast(myFilter1,newMyFirstFilter();4. acceptor.getFilterChain().addLast(myFilter2,newMySecondFilter();5. acceptor.getSessionConfig().setTcpNoDelay(true);6. 7. /Youcanspecifym

9、orethanoneaddressestobindtomultipleaddressesorinterfacecards.8. acceptor.setLocalAddress(newInetSocketAddress(8080);9. acceptor.setHandler(myHandler);10. 11. acceptor.bind();12. 13. /NewAPIrestrictsonebindperacceptor,andyoucantbindmorethanonce.14. /Thefollowingstatementwillraiseanexception.15. accep

10、tor.bind();你也许意识到与Spring框架整合也将变得更加简单。四、线程ThreadModel被移除了。最初引入ThreadModel的概念为的是简化一个IoService预定义的线程模式。然而,配置线程模式却变得非常简单以至于不能引入新的组建。与其易用性相比,线程模式带了更多的混乱。在2.x中,当你需要的时候,你必须明确的增加一个ExecutorFilter。ExecutorFilter使用一个特定的Executor实现来维系事件顺序。在1.x中,可以使用任意的Executor实现来来维系事件顺序,但2.x提供了两个新的ThreadPoolExecutor实现,OrderedThr

11、eadPoolExecutor和UnorderedThreadPoolExecutor,ExecutorFilter维系事件顺序,当以下两种情况:当使用默认构造方法时,ExecutorFilter创建一个OrderedThreadPoolExecutor,或者明确指明使用OrderedThreadPoolExecutor时OrderedThreadPoolExecutor 和 UnorderedThreadPoolExecutor内部使用了一些架构来防止发生OutOfMemoryError,所以你应该尽量使用这两个类而不是其他Executor的实现。五、协议编解码DemuxingProtoco

12、lCodecFactory被重写了。新增了DemuxingProtocolEncoder和DemuxingProtocolDecoder两个类,DemuxingProtocolCodecFactory只是这两个类的外壳。register() 方法被重命名为addMessageEncoder() 和addMessageDecoder(),这个变化使混合使用多个encoders和decoders变得更加自由。MessageEncoder接口也发生了改变,MessageEncoder.getMessageTypes()被移除了,当你调用addMessageEncoder(),你只需要指明信息的类型,

13、encoder就可以进行正确的编码了。六、集成JMX集成被重新设计了。Sping集成被简化了。七、其他方面的改变TransportType更名为TransportMetadata。TransportType改名是因为它的角色是元数据而不仅仅是一种枚举。IoSessionLogger被重新设计了。IoSessionLogger现在实现了SLF4J Logger接口,所以你可以像声明简单SLF4J logger实例一样声明它,这个变化使你不必向其他不必要的部分暴露IoSessionLogger对象。另外,在使用MDC时,请考虑使用简单的MdcInjectionFilter,这时IoSessionL

14、ogger是没有必要的。改变之前:Java代码1. IoSessionLogger.debug(session,.);改变之后:Java代码1. Loggerlogger=IoSessionLogger.getLogger(session);2. logger.debug(.);BroadcastIoSession被合并到IoSession中。ReadThrottleFilterBuilder被ReadThrottleFilter替代并最终移除。MINA2官方教程翻译(2) 快速上手指南一、介绍该教程通过构建一个time server,带你走进给予MINA的应用程序开发的大门,但在开始之前我们

15、需要具备下面的必要条件: MINA 2.x的核心包 JDK 1.5 或更高版本 SLF4J 1.3.0 或更高版本1. Log4J 1.2的用户:slf4j-api.jar, slf4j-log4j12.jar, and Log4J 1.2.x2. Log4J 1.3的用户:slf4j-api.jar, slf4j-log4j13.jar, and Log4J 1.3.x3. java.util.logging的用户:slf4j-api.jar and slf4j-jdk14.jar注意:请务必确认你所使用的slf4j-*.jar要与你的日志框架相匹配。例如,slf4j-log4j12.jar

16、 和 log4j-1.3.x.jar不能在一起使用,否则会引起混乱。我已经在Windows? 2000 professional 和 linux平台上测试了这个程序,如果你在运行这个程序的过程中遇到了问题,请立即联系我们的开发人员。当然,这个程序是与开发环境(IDE, editors等等)无关的,它可以在任何你熟悉的平台中运行。另外,为了简化,编译命令与运行脚本都没有体现,如果你需要学习如何编译并运行java程序,请参考Java tutorial。二、编写基于MINA框架的time server我们从创建一个名为MinaTimeServer.java的文件开始,最初的代码如下:Java代码1.

17、 publicclassMinaTimeServer2. 3. publicstaticvoidmain(Stringargs)4. /codewillgoherenext5. 6. 对所有人来说,这段代码应该是简单易懂的,我们只是简单的定义了一个main方法是这个程序能够正常运行起来。从现在开始,我们将逐步加入代码是其最终成为一个可用的server。首先,我们需要一个可以监听连接到来的对象,既然我们的程序是基于TCP/IP的,所以我们在程序中加入一个SocketAcceptor。Java代码1. importorg.apache.mina.core.service.IoAcceptor;2.

18、 importorg.apache.mina.transport.socket.nio.NioSocketAcceptor;3. 4. publicclassMinaTimeServer5. 6. 7. publicstaticvoidmain(Stringargs)8. 9. IoAcceptoracceptor=newNioSocketAcceptor();10. 11. 12. 加入NioSocketAcceptor之后,我们可以继续定义一个handler类,并将其与NioSocketAcceptor绑定到一个端口上。下面,我们在配置中增加一个filter,这个filter将把二进制数据

19、或是协议相关的数据转换成为一个消息对象,反之亦然。我们使用现有的TextLine工厂类,以为它可以处理基于文本的信息(你不需要自己来实现编解码部分)。Java代码1. importjava.nio.charset.Charset;2. 3. importorg.apache.mina.core.service.IoAcceptor;4. importorg.apache.mina.filter.codec.ProtocolCodecFilter;5. importorg.apache.mina.filter.codec.textline.TextLineCodecFactory;6. impo

20、rtorg.apache.mina.filter.logging.LoggingFilter;7. importorg.apache.mina.transport.socket.nio.NioSocketAcceptor;8. 9. publicclassMinaTimeServer10. 11. publicstaticvoidmain(Stringargs)12. 13. IoAcceptoracceptor=newNioSocketAcceptor();14. 15. acceptor.getFilterChain().addLast(logger,newLoggingFilter();

21、16. acceptor.getFilterChain().addLast(codec,newProtocolCodecFilter(newTextLineCodecFactory(Charset.forName(UTF-8);17. 18. 然后,我们定义一个handler,这个handler将对客户端的连接以及过去当前时间的请求做出服务。handler类必须实现IoHandler接口。对于大多数基于MINA的应用程序,这个操作无疑是一个很大的负担,因为它将处理客户端说有的请求。在这个教程中,我们的handler将继承自IoHandlerAdapter,这个类依照适配器模式来简化实现IoHa

22、ndler接口所带来的代码量。Java代码1. importjava.io.IOException;2. importjava.nio.charset.Charset;3. 4. importorg.apache.mina.core.service.IoAcceptor;5. importorg.apache.mina.filter.codec.ProtocolCodecFilter;6. importorg.apache.mina.filter.codec.textline.TextLineCodecFactory;7. importorg.apache.mina.filter.loggin

23、g.LoggingFilter;8. importorg.apache.mina.transport.socket.nio.NioSocketAcceptor;9. 10. publicclassMinaTimeServer11. 12. publicstaticvoidmain(Stringargs)throwsIOException13. 14. IoAcceptoracceptor=newNioSocketAcceptor();15. 16. acceptor.getFilterChain().addLast(logger,newLoggingFilter();17. acceptor.

24、getFilterChain().addLast(codec,newProtocolCodecFilter(newTextLineCodecFactory(Charset.forName(UTF-8);18. 19. acceptor.setHandler(newTimeServerHandler();20. 21. 现在,我们在NioSocketAcceptor增加一些Socket相关的配置:Java代码1. importjava.io.IOException;2. importjava.nio.charset.Charset;3. 4. importorg.apache.mina.core

25、.session.IdleStatus;5. importorg.apache.mina.core.service.IoAcceptor;6. importorg.apache.mina.filter.codec.ProtocolCodecFilter;7. importorg.apache.mina.filter.codec.textline.TextLineCodecFactory;8. importorg.apache.mina.filter.logging.LoggingFilter;9. importorg.apache.mina.transport.socket.nio.NioSo

26、cketAcceptor;10. 11. publicclassMinaTimeServer12. 13. publicstaticvoidmain(Stringargs)throwsIOException14. 15. IoAcceptoracceptor=newNioSocketAcceptor();16. 17. acceptor.getFilterChain().addLast(logger,newLoggingFilter();18. acceptor.getFilterChain().addLast(codec,newProtocolCodecFilter(newTextLineC

27、odecFactory(Charset.forName(UTF-8);19. 20. acceptor.setHandler(newTimeServerHandler();21. idlesessions22. acceptor.getSessionConfig().setReadBufferSize(2048);23. acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,10);24. 25. 在MinaTimeServer增加了两行新的内容,这些set方法分别设置了IoHandler、input buffer size和

28、session对象上的idle属性。buffer size指明了底层操作系统应该给与新到来的数据分配多少空间;第二行指明了什么时候应该检测idle sessions。在setIdleTime这个方法中,第一参数指明了在检测session是否idle时,应该关心那一种活动,第二个参数指明了session变为idle状态时需要经过多长的时间。handler的代码如下:Java代码1. importjava.util.Date;2. 3. importorg.apache.mina.core.session.IdleStatus;4. importorg.apache.mina.core.service.IoHandlerAdapter;5. importorg.apache.mina.core.session.IoSession;6. 7. publicclassTimeServerHandlerextendsIoHandlerAdapter8. 9. Override10. publicvoidexceptionCaught(IoSessionsession,Throwablecaus

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1