直接使用NIO进行网络编程,需要实现底层的连接细节,不免麻烦。 MINA屏蔽了底层的连接细节,用户只需要关注业务即可。
网络编程通常需要处理以下几个问题:
1. 编码与解码
2. 断包与粘包
3. 业务处理
这些问题都是业务相关的,MINA不可能加以实现,但提供了友好的接口,用户只需要实现这些接口即可。
使用MINA,echoserver可以简化如下:
-
public class EchoServer {
-
-
public static void main(String[] args) throws IOException {
-
NioSocketAcceptor server = new NioSocketAcceptor();
-
// 编解码
-
server.getFilterChain().addLast(
-
"codec",
-
new ProtocolCodecFilter(new TextLineCodecFactory(Charset
-
.forName("UTF-8"))));
-
//业务处理
-
server.setHandler(new EchoHandle());
-
//开启服务
-
server.bind(new InetSocketAddress(8888));
-
}
-
-
-
static class EchoHandle extends IoHandlerAdapter{
-
@Override
-
public void messageReceived( IoSession session, Object message ) throws Exception{
-
System.out.println(session.getRemoteAddress() + ":" + message);
-
//回显
-
session.write(message);
-
}
-
}
-
}
在MINA中,会存在ncpus+2个selector,其中1个selector用于处理OP_ACCEPT,另外ncpus+1个用于处理读写事件。当OP_READ就绪时候,该socket所在selector的线程被唤醒,读取数据,并将数据传递到一个过滤器链中。该过滤器
链可包含日志处理、安全认证、编解码等。过滤器链尾会把处理过的数据传给IoHandle,进行业务处理。
阅读(907) | 评论(0) | 转发(0) |