Chinaunix首页 | 论坛 | 博客
  • 博客访问: 80531
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 340
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-02 20:25
文章分类

全部博文(31)

文章存档

2015年(2)

2014年(29)

我的朋友

分类: Java

2014-09-11 16:41:22

  直接使用NIO进行网络编程,需要实现底层的连接细节,不免麻烦。 MINA屏蔽了底层的连接细节,用户只需要关注业务即可。
 网络编程通常需要处理以下几个问题:
1. 编码与解码
2. 断包与粘包
3. 业务处理
  这些问题都是业务相关的,MINA不可能加以实现,但提供了友好的接口,用户只需要实现这些接口即可。

 使用MINA,echoserver可以简化如下:

点击(此处)折叠或打开

  1. public class EchoServer {

  2.     public static void main(String[] args) throws IOException {
  3.         NioSocketAcceptor server = new NioSocketAcceptor();
  4.         // 编解码
  5.         server.getFilterChain().addLast(
  6.                 "codec",
  7.                 new ProtocolCodecFilter(new TextLineCodecFactory(Charset
  8.                         .forName("UTF-8"))));
  9.         //业务处理
  10.         server.setHandler(new EchoHandle());
  11.         //开启服务    
  12.         server.bind(new InetSocketAddress(8888));
  13.     }
  14.     
  15.     
  16.     static class EchoHandle extends IoHandlerAdapter{
  17.         @Override
  18.         public void messageReceived( IoSession session, Object message ) throws Exception{
  19.              System.out.println(session.getRemoteAddress() + ":" + message);
  20.              //回显
  21.              session.write(message);
  22.         }
  23.     }
  24. }
  在MINA中,会存在ncpus+2个selector,其中1个selector用于处理OP_ACCEPT,另外ncpus+1个用于处理读写事件。当OP_READ就绪时候,该socket所在selector的线程被唤醒,读取数据,并将数据传递到一个过滤器链中。该过滤器链可包含日志处理、安全认证、编解码等。过滤器链尾会把处理过的数据传给IoHandle,进行业务处理。

阅读(853) | 评论(0) | 转发(0) |
0

上一篇:4. tcp

下一篇:6.MINA-编解码

给主人留下些什么吧!~~