摘要:
了解Netty的人多少都会知道Netty的高性能的一个原因就是它是基于事件驱动的,而这一事件的原型就是Reactor模式。 所以在学习EventLoop前,很有必要先搞懂Reactor模式。 本文目录: 传统的服务器设计 Basic Reactor(单线程模式) MultiThreadReactor 阅读全文
摘要:
我们在Netty学习系列五的最后提出了一些问题还没得到回答,今天来通过学习NioServerSocketChannel的源码来帮我们找到之前问题的答案。 先看一下NioServerSocketChannel的继承结构。 AttributeMap接口及DefaultAttributeMap主要是提供了 阅读全文
摘要:
这篇文章主要是对ServerBootstrap启动流程做一个梳理,方便我们串联起各个类,同时也对主要的一些类有个大概的印象,方便之后逐个类的深入学习。 本篇文章不在具体贴出代码,而是对整个启动流程画了一个时序图,方便我们直观的了解各个过程,读者可以照着时序图,自己跟踪一遍代码,了解整个过程。 清晰大 阅读全文
摘要:
首先我们通过一张继承关系的图来认识下AbstractChannel在Netty中的位置。 除了Comaprable接口来自java自带的包,其他都是Netty包中提供的。 Comparable接口定义了Channel是可以比较的。 AttributeMap接口为Channel提供了绑定其他属性的能力 阅读全文
摘要:
IdleStateHandler是Netty为我们提供的检测连接有效性的处理器,一共有读空闲,写空闲,读/写空闲三种监测机制。 将其添加到我们的ChannelPipline中,便可以用来检测空闲。 先通过一段代码来学习下IdleStateHandler的用法: ConnectStateHandler 阅读全文
摘要:
通常,fastjson在序列化及反序列化枚举时,一般以下几种策略: 1).根据枚举的name值序列化及反序列化(默认) 2).根据枚举的ordinal序列化及反序列化 3).根据枚举的toString方法序列化,但是反序列仍采取默认的策略 这显然对我们的业务处理不够灵活,考虑以下一种情况: 有一个文 阅读全文
摘要:
可能大家都听过TCP建立连接时需要经历三次握手和四次挥手的。 那么具体的握手挥手的过程是怎么样的呢? 这篇文章就通过WireShark抓包来了解TCP连接建立和断开的过程。 实验方法: 写一段简单的代码 代码客户端和服务端,分别部署,让客户端主动像服务器发起连接,随后断开。让WireShark抓股这 阅读全文
摘要:
本文目的:测试数据在ChannelPipeline中的流经顺序及状态。 先看本文的测试代码: AdditionalInBoundHandler:入站处理器,不做任何处理,只是在响应读事件时打印用来观察,并继续通过fireChannelRead传递读事件。 BigIntegerDecoder:解码器, 阅读全文
摘要:
我们知道ByteBuf通过读写两个索引分离,避免了NIO中ByteBuffer中读写模式切换时,需要flip等繁琐的操作。 今天就通过一段测试代码以及图例来直观的了解下ByteBuf中的readIndex, writeIndex以及capacity的概念。 先贴出测试代码: 然后是测试打印结果: 对 阅读全文
摘要:
问题描述: 在Spring Boot集成myBatis时,发现启动时,mapper接口一直注入失败。 现象如下: VehicleDAO就是需要的mapper对象,一个简单的接口。 已经在application.properties中配置了mybatis.config-location=classpa 阅读全文