简单介绍:MINA框架是对java的NIO包的一个封装,简化了NIO程序开发的难度,封装了很多底层的细节,然开发者把精力集中到业务逻辑上来,最近做了一个相关的项目,为了备忘对MINA做一个总结。
下面这个start方法用来初始化MINA:
-
private void start(int port, WebContext ctx)
- throws IOException, InstantiationException
- , IllegalAccessException, ClassNotFoundException {
-
- NioSocketAcceptor acceptor = new NioSocketAcceptor(5);
-
- java.util.concurrent.Executor threadPool = Executors.newFixedThreadPool(1500);
-
- acceptor.getFilterChain().addLast("exector", new ExecutorFilter(threadPool));
- acceptor.getFilterChain().addLast("codec",
- new ProtocolCodecFilter(new WebDecoder(),new WebEncoder()));
- LoggingFilter filter = new LoggingFilter();
- filter.setExceptionCaughtLogLevel(LogLevel.DEBUG);
- filter.setMessageReceivedLogLevel(LogLevel.DEBUG);
- filter.setMessageSentLogLevel(LogLevel.DEBUG);
- filter.setSessionClosedLogLevel(LogLevel.DEBUG);
- filter.setSessionCreatedLogLevel(LogLevel.DEBUG);
- filter.setSessionIdleLogLevel(LogLevel.DEBUG);
- filter.setSessionOpenedLogLevel(LogLevel.DEBUG);
- acceptor.getFilterChain().addLast("logger", filter);
-
- acceptor.setReuseAddress(true);
-
- acceptor.getSessionConfig().setReuseAddress(true);
- acceptor.getSessionConfig().setReceiveBufferSize(1024);
- acceptor.getSessionConfig().setSendBufferSize(10240);
-
- acceptor.getSessionConfig().setTcpNoDelay(true);
-
- acceptor.setBacklog(100);
- acceptor.setDefaultLocalAddress(new InetSocketAddress(port));
-
- acceptor.setHandler(new WebHandler());
- acceptor.bind();
- }
NioSocketAcceptor是MINA的适配器,一切都是从这里开始的。MINA中有个过滤器和处理器的概念,过滤器用来过滤数据,处理器用来处理数据。具体来说MINA的处理模型就是request->过滤器A->过滤器B->处理器->过滤器B->过滤器A->response,这里的request和response类似serlvet的request和response。
- acceptor.getFilterChain().addLast("exector", new ExecutorFilter(threadPool));
-
- acceptor.getFilterChain().addLast("codec",
- new ProtocolCodecFilter(new WebDecoder(),new WebEncoder()));
-
-
现在详细描述一下request->WebDecoder->WebHandler->WebEncode->response的过程:
客户端发送一个请求到MINA服务器,这里相当于来了一个requet。请求首先来到
- WebDecoder类(实现了ProtocolDecoder接口)中的
-
boolean decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception{}方法
-
-
-
-
-
-
-
-
-
-
然后到
- WebHandler(扩展了IoHandlerAdapter抽象类)中的
-
void messageReceived(IoSession session, Object message) throws Exception{}方法
- WriteFuture future = session.write(response);
- future.addListener(IoFutureListener.CLOSE);
- IoFutureListener里面有个operationComplete(IoFuture future)方法,当流发送完成之后才调用这个方法。
-
-
-
-
-
-
然后到
- WebEncoder类(实现了ProtocolEncoder接口)中的
-
boolean encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception{}
- 方法
-
-
-
-
-
-
-
分享到:
相关推荐
nio的经典框架mina 在此基础上发展的netty是nio经典之中的经典
阻塞和非阻塞io的简单通信程序,自己写的(写的不好)放这里做个备份 博文链接:https://javag.iteye.com/blog/221595
java mina框架使用总结
服务器框架MINA使用经验总结 socket协议通信框架
niosocket及其开源框架MINA学习总结收集.pdf
mina 通信框架应用,简单的入门,客户端和服务端的结构总结
mina是一个基于java nio的网络通信框架。主要屏蔽了网络通信的一些细节,对Socket进行封装,并且是NIO的一个实现架构,可以帮助我们快速的开发网络通信,常用于游戏的开发、中间件服务端的程序中。 Apache的Mina...
长期从事高性能通信软件的架构设计和开发工作,有多年在NIO领域的设计、开发和运维经验,精通NIO编程和Netty、Mina等主流NIO框架。目前负责华为软件公司下一代SOA中间件和PaaS平台的架构设计工作。
长期从事高性能通信软件的架构设计和开发工作,有多年在NIO领域的设计、开发和运维经验,精通NIO编程和Netty、Mina等主流NIO框架。目前负责华为软件公司下一代SOA中间件和PaaS平台的架构设计工作。
1. 开篇导言 本节目标:对于入门篇的总结 目标用户:无编程经验,但对微信小程序感兴趣的同学。... -> MINA框架的目录结构,文件后缀及其定位。 了解,并习惯使用->调试工具:Wxml、Console、Sources
4、网络通信采用MINA2.0,为整个项目省去socket和多线程的麻烦,好的框架才使得整个项目增添了如此之多的功能; 5、本人与朋友已经为消灭Bug做出了很多努力,但仍然不乏一些尚未实现或存在bug的功能,有不合理的...
小程序 MINA JavaScript 文字识别 基于小程序开发设计一款智能文字识别查询小程序,采用Java音进行开发,使用开放API现图片文字识别,不用安装、使用方便,对方便人民的生活产生积极意义。 系统的基本环境是以...
预览链接技术栈小程序MINA框架: 一个响应的数据绑定框架。分为两块视图层(View)和逻辑层(App Service)Flex:flex弹性布局Express : http服务框架websocket: 前后端消息的实时推送mongoose: 操作mongodb数据库pm2: ...