解析Mina代码三部曲

发表于:2012-1-30 10:36

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:firecloudhawk    来源:51Testing软件测试网采编

  首先,Mina是什么?能帮我们做什么?我研究一个新技术的时候,首先问的就是这样的问题。我个人的理解就是Mina是一个关注于通讯层的框架,任何需要底层通讯的应用,都可以使用它。

  Mina的优势:

  1、用NIO实现,无需太多线程。可以处理的并发量更大。

  2、对于应用层来说,编程更方便。

  好了废话少说,先看个Demo吧

  1. public static void main(String[] args) throws IOException {  
  2.     // 创建Acceptor  
  3.     IoAcceptor acceptor = new NioSocketAcceptor();  
  4.     // 注册filter  
  5.    acceptor.getFilterChain().addLast( "logger"new LoggingFilter() );  
  6.    acceptor.getFilterChain().addLast( "codec"new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));  
  7.     // 注册你的业务处理类  
  8.     acceptor.setHandler( new TimeServerHandler() );  
  9.     // 配置参数  
  10.     acceptor.getSessionConfig().setReadBufferSize( 2048 );  
  11.     acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );  
  12.     // 让Acceptor在绑定的地址侦听  
  13.     acceptor.bind( new InetSocketAddress(PORT) );  
  14. }

  IoHandler

  1. public interface IoHandler {  
  2.      void sessionCreated(IoSession session) throws Exception;  
  3.      void sessionOpened(IoSession session) throws Exception;  
  4.      void sessionClosed(IoSession session) throws Exception;  
  5.      void sessionIdle(IoSession session, IdleStatus status) throws Exception;  
  6.      void exceptionCaught(IoSession session, Throwable cause) throws Exception;  
  7.      void messageReceived(IoSession session, Object message) throws Exception;  
  8.      void messageSent(IoSession session, Object message) throws Exception;  
  9. }

  首先new一个Acceptor,可以看出,Acceptor是我们要操作的服务器对象。然后,向Acceptor里注册了两个filter。filter的概念类似于web服务器里的filter。filter处于你的业务端代码和具体的发送数据代码之间,它负责过滤或者说处理传递过来的信息。业务处理代码,写在Handler里。

  代码结构相当的清晰。我们需要填写的业务代码就是 Handler 和 Filter了。它们俩很相似,但是在概念上是有区别的。filter事实上主要是处理底层的通信字节流,通信协议等,一般跟业务逻辑没什么关系。Handler是专门暴露给应用开发者,用来填写业务处理代码的。

  看看下面的图便知道了

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号