
Netty学习笔记
根据课程学习总结
课程地址:https://coding.imooc.com/learn/list/230.html
@从入门到入土
学无止境
展开
-
Netty之编码
目录writeAndFlushMessageToByteEncoderhead节点的write方法总结head节点的flush方法总结writeAndFlushNetty写出数据是通过Outbound事件传播完成的,具体则是通过pipeline.writeAndFlush从tail节点开始依次向前传播,最后由head节点完成数据的写出与刷新。writeAndFlush的...原创 2020-01-19 00:57:16 · 1019 阅读 · 0 评论 -
Netty之解码
ByteToMessageDecoderByteToMessageDecoder是一个抽象类,实现了ChannelInboundHandlerAdapter接口,Netty所有顶层解码器都是基于ByteToMessageDecoder实现的,它将整体过程进行抽象,具体逻辑交给子类实现,并通过pipeline进行事件传播。它的整体过程可分三个步骤:累加字节流。 调用子类的decode方...原创 2020-01-18 00:57:46 · 1275 阅读 · 0 评论 -
Netty之内存管理
目录Netty内存规格介绍内存区间划分内存分配单位内存分配命中缓存分配申请新内存分配ByteBuf的释放与回收Netty内存规格介绍内存区间划分tiny:0~512B small:512B~8K normal:8K~16M huge:16M以上内存分配单位Chunk:Netty中所有内存都是以Chunk为单位分配的,一个Chunk有16M,例...原创 2020-01-16 22:33:51 · 1506 阅读 · 0 评论 -
Netty之内存分配器ByteBufAllocator
目录内存分配器继承体系ByteBufAllocatorAbstractByteBufAllocatorUnpooledByteBufAllocatornewHeapBuffernewDirectBufferPooledByteBufAllocatorPoolThreadLocalCachePoolArenaarena分配内存流程内存分配器继承体系...原创 2020-01-15 23:39:20 · 2033 阅读 · 0 评论 -
Netty之认识ByteBuf
目录ByteBuf的结构常见APIreadwriteget、setmark、resetByteBuf的分类继承体系图AbstractByteBufPooled与UnpooledUnsafe与非UnsafeHeap与DirectByteBuf是Netty底层直接与数据打交道的一层抽象。ByteBuf作为数据流的载体,提供了一些列简单易用的API来操...原创 2020-01-15 00:11:41 · 1184 阅读 · 0 评论 -
Pipeline之异常传播
异常传播Demo启动类public final class Server { public static void main(String[] args) throws Exception { EventLoopGroup bossGroup = new NioEventLoopGroup(1); EventLoopGroup workerGro...原创 2020-01-14 14:57:26 · 1368 阅读 · 0 评论 -
Pipeline之Outbound事件传播
ChannelOutboundHandler基于ChannelHandler,扩展了一些Outbound事件。public interface ChannelOutboundHandler extends ChannelHandler { // 端口绑定 void bind(ChannelHandlerContext ctx, SocketAddress localAd...原创 2020-01-13 23:40:46 · 518 阅读 · 0 评论 -
Pipeline之Inbound事件传播
ChannelHandler继承体系ChannelHandler:所有逻辑处理器的抽象。public interface ChannelHandler { // handler添加完成回调 void handlerAdded(ChannelHandlerContext ctx) throws Exception; // handler删除完成回调 ...原创 2020-01-13 15:19:32 · 788 阅读 · 0 评论 -
Pipeline添加与删除ChannelHandler
添加ChannelHandlerChannelHandler是在服务端启动过程中,Channel初始化时通过addLast方法添加的。 public static void main(String[] args) throws Exception { // 配置服务端的 NIO线程组 // boss线程组用于网络事件的监听 Even...原创 2020-01-12 21:40:36 · 1294 阅读 · 0 评论 -
Netty之Pipeline的初始化
Pipeline的初始化Pipeline的初始化逻辑是在AbstractChannel的构造函数中完成的,在其子类NioServerSocketChannel实例化时触发。 protected AbstractChannel(Channel parent) { this.parent = parent; id = newId(); u...原创 2020-01-12 00:59:28 · 710 阅读 · 0 评论 -
Netty之Channel的分类
Channel:是对网络Socket的封装,抽象了网络I/O的读、写、连接与绑定。AbstractChannel:实现了Channel接口的大部分功能,一次连接用到的Channel、ChannelId、eventLoop、pipelIne、unsafe都会保存在这里。AbstractNioChannel:通过select的方式对读写事件进行监听。客户端Channel:主要注册rea...原创 2020-01-11 23:05:31 · 2272 阅读 · 0 评论 -
Netty之NioEventLoop
目录NioEventLoop的创建NioEventLoop的启动NioEventLoop的执行检测IO事件并解决空轮询Bug处理IO事件任务执行NioEventLoop的创建NioEventLoop的字面意思为NIO事件循环,它主要用于新连接的接入,以及数据流的读与写,可以理解为是整个Netty组件的发动机。每一个NioEventLoop都是由NioEvent...原创 2020-01-11 17:40:20 · 769 阅读 · 0 评论 -
Netty服务端启动流程
目录服务启动Demo启动流程概述创建服务端Channel初始化服务端Channel注册Selector绑定本地端口,开始对端口进行监听服务启动DemoNetty服务端启动Demo启动流程概述服务端启动主要可分为创建服务端Channel、初始化Channel、注册Selector、绑定本地端口并开始端口监听四个步骤。创建服务端ChannelNet...原创 2020-01-09 00:06:40 · 557 阅读 · 0 评论 -
Netty服务端启动Demo
Netty的版本是: <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.6.Final</versio...原创 2020-01-05 14:17:35 · 399 阅读 · 0 评论 -
认识Netty
Netty是什么?异步事件驱动框架,用于快速开发高性能服务端和客户端。封装了JDK底层BIO和NIO模型,提供高度可用的API。自带编解码器解决拆包和粘包问题,用户只关心业务逻辑即可。精心设计的reactor线程模型支持高并发海量连接。自带各种协议栈,让你处理任何一种通用协议几乎都不用亲自动手。Netty核心组件概述工作流程图NioEventLoop字面意思为NIO事件循环...原创 2020-01-04 19:42:30 · 355 阅读 · 0 评论 -
一个简单的Socket通信例子
客户端与服务端交互流程客户端public class Client { // 服务端 host private static final String HOST = "127.0.0.1"; // 服务端 port private static final int PORT = 8000; // 消息发送间隔 private static fi...原创 2020-01-04 17:50:13 · 530 阅读 · 0 评论 -
理解 IO 的同步、异步、阻塞、非阻塞
形象的说明如果你想吃一份宫保鸡丁盖饭:同步阻塞:你到饭馆点餐,然后在那等着,还要一边喊:好了没啊!同步非阻塞:在饭馆点完餐,就去遛狗了。不过溜一会儿,就回饭馆喊一声:好了没啊!异步阻塞:遛狗的时候,接到饭馆电话,说饭做好了,让您亲自去拿。异步非阻塞:饭馆打电话说,我们知道您的位置,一会给你送过来,安心遛狗就可以了。结合IO 说明同步阻塞 IO:在此种方式下,...原创 2019-12-29 19:52:04 · 2281 阅读 · 0 评论