最全apache Mina分析小结(1(2),2024年最新BAT面试&高级进阶

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以点击这里获取!

IoFilter:

IoFilter是一个过滤器,但是在mina中它不仅仅就是一个过滤器。功能如下:

(1)记录事件的日志
(2)测量系统性能
(3)信息验证
(4)过载控制
(5)信息的转换 (编码和解码)
(6)和其他更多的信息

在启动时,各种IoFilter的实现类被加入到FilterChain中,在这里,就是一个责任链模式了。加入的IoFilter实例的顺序,决定了执行的顺序。

public static void main(String[] args) throws IOException {
		SocketAddress address = new InetSocketAddress("localhost", 4321);
		IoAcceptor acceptor = new SocketAcceptor();
		IoServiceConfig config = acceptor.getDefaultConfig();

		// 配置数据的编解码器
		config.getFilterChain().addLast("codec",
				new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
		config.getFilterChain().addLast("logger", new LoggingFilter());

		// 绑定服务器端口
		acceptor.bind(address, new ServerHandler());
	}

执行的顺序如下图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

IoFilter的线程池:

在Mina的API中提供了一个ExecutorFilter,该线程池实现了IoFilter接口,它可以作为一个IoFilter添加到IoFilterChain中,它的作用就是将I/O Processor中的事件通过其自身封装的一个线程池来转发到下一个过滤器中。在没有添加该线程模型时,I/O Processor的事件是通过方法来触发的,然后转发给IoHandler。在没有添加该线程池的时候,所有的事件都是在单线程模式下运行的,也就是说有的事件和处理(IO Processor,IoHandler,IoFilter)都是运行在同一个线程上,这个线程就是IO Processor的线程,但是这个线程的数量受到CPU核数的影响,因此系统的性能也直接受CPU核数的影响。

在Asyncweb中,采用了OrderedThreadPoolExecutor这个线程池。这个executor是用来处理从网络中来的请求。它的不同之处在于,对于同一个session来的请求,它能够按照请求到达的时间顺序的执行。举个例子,在一个session中,如果先接收到request A,然后再接收到request B,那么,OrderedThreadPoolExecutor能够保证一定处理完A之后再处理B。而一般的thread pool,会将A和B传递给不同的thread处理,很有可能request B会先于request A完成。

IoHandler:

在IoFilter层,Mina进行了数据接收,编码解码等操作。而IoHandler就是逻辑层了。我们可以继承IoHandlerAdapter,实现自己的IoHandler。IoHandlerAdapter包括几个方法:

public void sessionCreated(IoSession session)
 public void sessionOpened(IoSession session) 
 public void sessionClosed(IoSession session) 
 public void sessionIdle(IoSession session, IdleStatus status) 
 public void exceptionCaught(IoSession session, Throwable cause) 
 public void messageReceived(IoSession session, Object message)
 public void messageSent(IoSession session, Object message)

Mina中的类结构图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

SingleSessionIoHandlerDelegate:这是一个服务器和客户端只有一个会话时使用的类,在该类的方法中没有提供session的参数。在Asyncweb中就是使用了这个IoHandler。见《AsyncWeb原理分析(三)——Mina的IoHandler》。

ChainedIoHandler:这个类主要是用于处理IoHandler的messageReceived事件,它和IoHandlerChain配合使用。当在业务逻辑中有多个IoHandler需要处理时,你可以将你的每个IoHandler添加到IoHandlerChain中,这个和过滤器链比较相似。

StreamIoHandler:该类也是用于处理IoHandler的messageReceived事件,它主要用于文件传输的系统中,比如FTP服务器中。

DemuxingIoHandler:该类主要是用于处理多个IoHandler的messageReceived,由于在TCP/IP协议的数据传输中会出现数据的截断现象(由于socket传输的数据包的长度是固定的,当数据包大于该长度,数据包就会被截断),所以提供这个类主要是保证IoHandler所处理的数据包的完整性,这个和编解码器中的CumulativeProtocolDecoder类似。

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以点击这里获取!

源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

需要这份系统化的资料的朋友,可以点击这里获取!

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值