10 2021 档案

摘要:一、请求数据的读取 1、读取请求行 2、读取请求头 3、读取请求体 综合上面三个序列图,对于请求行,请求头,请求体的读取都最终调用了NioSocketWrapper 对象实例的 fillReadBuffer() 方法。只不过请求行和请求头读取参数传递为 true,请求体读取参数传递为 false。 阅读全文
posted @ 2021-10-27 17:30 上官兰夏 阅读(461) 评论(0) 推荐(0)
摘要:一、长连接 在Http请求头中,Connection: keep-alive 代表长连接。在tomcat io线程读写时,是否保持长连接的方法如下: // doRun() method logic in SocketProcessor if (handshake == 0) { SocketStat 阅读全文
posted @ 2021-10-27 17:30 上官兰夏 阅读(263) 评论(0) 推荐(0)
摘要:一、处理请求的核心流程 SocketProcessor.doRun()--> ConnectionHandler.process()--> AbstractProcessorLight.process()--> Http11Processor.service--> CoyoteAdapter.ser 阅读全文
posted @ 2021-10-27 17:29 上官兰夏 阅读(273) 评论(0) 推荐(0)
摘要:一、NIO模型 Tomcat7以后,默认的IO模型就是NIO了,但是它的实现跟常用的Reactor模型略有不同,具体设计如下: 可以看出多了一个BlockPoller 的设计,这是因为在Servlet规范中ServletInputStream和ServletOutputStream是阻塞的,所以请求 阅读全文
posted @ 2021-10-27 17:27 上官兰夏 阅读(611) 评论(0) 推荐(0)
摘要:一、Lifecycle tomcat启动,实际上就是对以上的组件进行实例化,因此使用Lifecycle接口统一管理各组件的生命周期,根据各个组件之间的父子级关系,首先调用init()方法逐级初始化各组件,然后在调用start()的方法进行启动。 //初始化 public void init() th 阅读全文
posted @ 2021-10-27 17:24 上官兰夏 阅读(1175) 评论(0) 推荐(0)
摘要:一、架构图 二、容器组件 server:整个servlet容器,一个tomcat对应一个server,一个server包含多个service,server在tomcat中的实现类是:StandardServer。 service:一个service包含多个connector(接受请求的协议),和一个 阅读全文
posted @ 2021-10-27 17:23 上官兰夏 阅读(734) 评论(0) 推荐(0)
摘要:一、ByteBuf ByteBuf是netty自创的一个数据读写类,解决了原有的ByteBuffer的一些缺点。ByteBuf通过ByteBufAllocator选择allocator并调用对应的buffer()方法来创建的,默认使用直接内存作为ByteBuf,容量为256个字节,可以指定初始容量的 阅读全文
posted @ 2021-10-26 10:56 上官兰夏 阅读(721) 评论(0) 推荐(0)
摘要:一、粘包与半包 粘包 现象:第一次发送abc,第二次发送def,接收abcdef。 原因:1、应用层,接收方 ByteBuf 设置太大(Netty 默认 1024) 2、传输层,滑动窗口,假设发送方 256 bytes 表示一个完整报文,但由于接收方处理不及时且窗口大小足够大(大于256 bytes 阅读全文
posted @ 2021-10-26 10:56 上官兰夏 阅读(199) 评论(0) 推荐(0)
摘要:一、序列化算法拓展 序列化接口 public interface Serializer { /** * 序列化 * @param object 被序列化的对象 * @param <T> 被序列化对象类型 * @return 序列化后的字节数组 */ <T> byte[] serialize(T ob 阅读全文
posted @ 2021-10-26 10:56 上官兰夏 阅读(154) 评论(0) 推荐(0)
摘要:一、EventLoop EventLoop 本质是一个单线程执行器(同时维护了一个 Selector),里面有 run 方法处理一个或多个 Channel 上源源不断的 io 事件。继承自 j.u.c.ScheduledExecutorService 因此包含了线程池中所有的方法,除此之外,继承自n 阅读全文
posted @ 2021-10-26 10:55 上官兰夏 阅读(90) 评论(0) 推荐(0)
摘要:一、先看服务端的入门示例代码 public class MyServer { public static void main(String[] args) throws InterruptedException { //第一步 创建bossGroup 接受数据然后转发给workerGroup,是一个 阅读全文
posted @ 2021-10-26 10:53 上官兰夏 阅读(71) 评论(0) 推荐(0)
摘要:一、ServerBootstrap的初始化 ServerBootstrap serverBootstrap = new ServerBootstrap(); serverBootstrap.group(bossGroup, workerGroup) .channel(NioServerSocketC 阅读全文
posted @ 2021-10-26 10:53 上官兰夏 阅读(26) 评论(0) 推荐(0)
摘要:一、简介 NIO的三大组件Channel,Buffer,Selector,Buffer我们已经以ByteBuffer讲述过了, Channel常见的有如下四种: FileChannel:用于文件传输 DatagramChannel:UDP传输 SocketChannel:TCP传输,客户端 Serv 阅读全文
posted @ 2021-10-26 10:52 上官兰夏 阅读(186) 评论(0) 推荐(0)
摘要:一、简介 数据的传输不是按照原有的磨样进行的,是经过一定的转换的,我们经常用到的也就是ByteBuffer,除此之外还有ShortBuffer、IntBuffer、LongBuffer、FloatBuffer、DoubleBuffer、CharBuffer。Bytebuffer还有一些子类Mappe 阅读全文
posted @ 2021-10-26 10:51 上官兰夏 阅读(206) 评论(0) 推荐(0)