Mina源码-整体解读】的更多相关文章

今天的这一节,将从整体上对mina的源代码进行把握,网上已经有好多关于mina源码的阅读笔记,但好多都是列举了一下每个接口或者类的方法.我倒是想从mina源码的结构和功能上对这个框架进行剖析.源码的阅读一般有如下几种方法:第一,根据问题读源码,这种方法可能用的最多,哪里有问题了,然后F3一步步点进去:第二种,专门为了读源码而读,从整体到局部,总用法到设计.第三种,可是根据软件的设计特点,根据特点逐一解读.这几篇文章主要将根据第三种方法进行阅读,因为mina的各个模块很有条理,而且我关注的重点也主…
AQS源码详细解读 目录 AQS源码详细解读 基础 CAS相关知识 通过标识位进行线程挂起的并发编程范式 MPSC队列的实现技巧 代码讲解 独占模式 独占模式下请求资源 独占模式下的释放资源 共享模式 请求资源 释放资源 条件变量 await方法 signal方法 总结 为什么需要SIGNAL状态 为什么需要PROPAGATE状态 基础 在讲解AQS之前,有几个额外的知识需要了解.知道了这些,才能明白AQS框架中很多代码的道理. CAS相关知识 通过标识位进行线程挂起的并发编程范式 MPSC队列…
Filter我们很熟悉,在Mina中,filter chain的用法也类似于Servlet的filters,这种拦截器的设计思想能够狠轻松的帮助我们实现对资源的统一处理.我们先大致连接下mina中的filter能给我们带来什么. LoggingFilter logs all events and requests. ProtocolCodecFilter converts an incoming ByteBuffer into message POJO and vice versa. Compr…
接着Mina源码阅读笔记(四)-Mina的连接IoConnector1,,我们继续: AbstractIoAcceptor: 001 package org.apache.mina.core.rewrite.service; 002   003 import java.io.IOException; 004 import java.net.SocketAddress; 005 import java.util.ArrayList; 006 import java.util.Collections…
1.NIO超级陷阱 之所以说NIO超级陷阱,就是因为我在本系列开头的那句话,因为使用缺陷导致客户业务系统瘫痪.当然,我对这个问题进行了很深的追踪,包括对MINA源码的深入了解,但其实之所以会出现这个问题,它的根不是MINA的原因,而是JDK底层的问题. JDK底层在实现nio时,为了能够唤醒等待在io上的线程,在windows平台使用了两个端口建立连接发消息实现.看如下代码: public class NIOTest { @Test public void test1(){ final int …
TypeScript 由微软在 2012 年 10 月首发,经过几年的发展,已经成为国内外很多前端团队的首选编程语言.前端三大框架中的 Angular 和 Vue 3 也都改用了 TypeScript 开发.即使很多人没直接用过 TypeScript,他们也在通过 VSCode 提供的智能提示功能间接享受着 TypeScript 带来的各项便利. 很多人对 TypeScript 背后的原理很感兴趣,你可能想要: 更好地理解 TypeScript: 学习编译原理相关的知识来丰富自己(编译器和操作系…
IoFuture是和IoSession紧密相连的一个类,在官网上并没有对它的描述,因为它一般不会显示的拿出来用,权当是一个工具类被session所使用.当然在作用上,这个系列可并不简单,我们先看源码的注释对它的描述: IoFuture represents the completion of an asynchronous I/O operation on an IoSession. 这个类是提供异步操作的一个工具,所以在读源码之前,必须对异步IO操作有所了解,然后我们才可以顺着这条路往下走.关…
IoSession是Mina管理两端的一个重要部分,也是Mina的核心,Session具有了生命周期的概念,它的生命周期和连接时紧密相关的,这点在后面的介绍中会涉及.另外,好像hibernate中也有session也有生命周期(真的是好久没有用了,连hibernate有里session是干嘛的都想不起来了). 在读源码之前,我们还是先了解下IoSession的作用和一些基本概念.IoSession的主要作用有如下一些: l  管理连接.注意,这里的管理连接并不是直接去控制我们上次讲的最底层的连接…
上一篇写的是IoAcceptor是服务器端的接收代码,今天要写的是IoConnector,是客户端的连接器.在昨天,我们还留下一些问题没有解决,这些问题今天同样会产生,但是都要等到讲到session的时候才能逐步揭开.先回顾一下问题: l  我们已经在AbstractPollingIoAcceptor中看到了,mina是将连接(命令)和业务(读写)分不同线程处理的,但是我们还没有看到mina是如何实现对这些线程的管理的. l  在昨天的最后,我们看到在NioSocketAcceptor中的具体N…
其实在mina的源码中,IoService可以总结成五部分service责任.Processor线程处理.handler处理器.接收器和连接器,分别对应着IoService.IoProcessor.IoHandler.IoAcceptor和IoConnector.在代码的中有如下包跟IoService关系密切: 1 org.apache.mina.core.service 2 org.apache.mina.transport.* 3 org.apache.mina.core.polling 这…