![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
吃透Netty源码系列
吃透Netty源码系列
王伟王胖胖
这个作者很懒,什么都没留下…
展开
-
Netty相关总结
Netty相关总结Netty初始化总结Netty组件总结Netty内存管理总结Netty初始化总结一些初始化的知识点。Netty组件总结一些常用组件,不过还有好多处理器,编解码器没说,这个可以看我的源码。Netty内存管理总结很多细节都没怎么写,还是得看源码,很多结构和流程图我的源码文章都有,有兴趣的可以看看。好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的...原创 2020-05-06 18:09:42 · 1980 阅读 · 7 评论 -
吃透Netty源码系列六十之NioMessageUnsafe和NioByteUnsafe
吃透Netty源码系列六十之Netty的Unsafe相关三NioMessageUnsaferead读客户端连接NioServerSocketChannel的doReadMessagesNioByteUnsaferead读客户端数据handleReadException处理读异常closeOnRead读关闭(半关闭)TCP关闭简单举例NioSocketChannelUnsafeNioMessage...原创 2020-03-11 22:17:39 · 975 阅读 · 0 评论 -
吃透Netty源码系列五十九之AbstractUnsafe和AbstractNioUnsafe
吃透Netty源码系列五十九之Unsafe相关二Netty的Unsafe接口NioUnsafeAbstractNioUnsaferemoveReadOp清除读监听removeReadOp清除读监听NioMessageUnsafe的readNioServerSocketChannel的doReadMessagesNetty的Unsafe接口NioUnsafe这个是针对NIO的子接口:publ...原创 2020-03-11 22:16:51 · 804 阅读 · 0 评论 -
吃透Netty源码系列五十八之Unsafe和AbstractUnsafe
吃透Netty源码系列五十八之UnsafeNetty的Unsafe接口AbstractUnsafe基本抽象实现属性方法NioUnsafeAbstractNioUnsafeNioMessageUnsafe的readNioServerSocketChannel的doReadMessagesNetty的Unsafe接口这个Unsafe可不是JDK原生的Unsafe哦,主要就是一些直接跟IO底层直接相...原创 2020-03-11 22:16:01 · 617 阅读 · 0 评论 -
吃透Netty源码系列五十七之RecvByteBufAllocator
吃透Netty源码系列五十七之RecvByteBufAllocatorRecvByteBufAllocatorMaxMessagesRecvByteBufAllocatorDefaultMaxMessagesRecvByteBufAllocatorMaxMessageHandle处理器AdaptiveRecvByteBufAllocatorHandleImplRecvByteBufAllocat...原创 2020-03-09 22:01:34 · 2999 阅读 · 0 评论 -
吃透Netty源码系列五十六之NioEventLoopGroup创建细节二
吃透Netty源码系列五十六之NioEventLoopGroup创建细节二NioEventLoopopenSelectorSelectorTupleSelectedSelectionKeySetSelectedSelectionKeySetSelectorServerBootstrap创建NioServerSocketChannel创建获取原生ServerSocketChannelImpl对象传入...原创 2020-03-09 22:00:48 · 619 阅读 · 0 评论 -
吃透Netty源码系列五十五之NioEventLoopGroup创建细节一
吃透Netty源码系列五十五之NioEventLoopGroup创建细节一一行代码的秘密NioEventLoopGroup的terminationFuture终止回调NioEventLoop的初始化io.netty.noKeySetOptimizationio.netty.selectorAutoRebuildThresholdNioEventLoop构造方法的newTaskQueuePlatfo...原创 2020-03-08 22:20:38 · 697 阅读 · 0 评论 -
吃透Netty源码系列五十四之ChannelFuture异步回调详解三
吃透Netty源码系列五十四之ChannelFuture异步回调详解三sysn同步DefaultChannelPromise的syncDefaultPromise的syncDefaultChannelPromise的awaitDefaultPromise的awaitDefaultPromise的incWaitersDefaultChannelPromise的checkDeadLockDefault...原创 2020-03-06 22:03:45 · 1160 阅读 · 0 评论 -
吃透Netty源码系列五十三之ChannelFuture异步回调详解二
吃透Netty源码系列五十三之ChannelFuture异步回调详解二继续flushAbstractUnsafe的flushChannelOutboundBuffer的addFlushDefaultPromise的setUncancellableAbstractUnsafe的flush0NioSocketChannel的doWriteChannelOutboundBuffer的removeByte...原创 2020-03-06 22:03:18 · 1014 阅读 · 1 评论 -
吃透Netty源码系列五十二之ChannelFuture异步回调详解一
吃透Netty源码系列五十二之ChannelFuture异步回调详解Netty的异步理解JDK的FutureNetty的FutureChannelFuturePromiseNetty的异步理解Netty是以事件驱动的,那什么是事件驱动,简单理解就是闹钟,你以前读书的时候用过闹钟吧,你晚上10点定时到噪声6点闹,你不会等着他走到6点到,你肯定睡觉去啦,6点了闹钟闹铃响了,你就知道要起床了,这就是...原创 2020-03-06 22:02:51 · 2577 阅读 · 2 评论 -
吃透Netty源码系列五十一之ByteBuf的自动释放详解
吃透Netty源码系列五十一之ByteBuf的自动释放详解SimpleChannelInboundHandler为什么不用手动释放我们处理器拿到的缓冲区从哪里来NioByteUnsafe的read传到tail处理器来释放我们写出去的谁释放呢产生缓冲区对象2834HeadContext的writeNioByteUnsafe的filterOutboundMessageNioByteUnsafe的new...原创 2020-03-05 22:43:23 · 2203 阅读 · 0 评论 -
吃透Netty源码系列五十之ByteBuf内存泄漏简单分析
吃透Netty源码系列五十之ByteBuf内存泄漏问题一最容易内存泄漏的例子客户端代码服务端代码堆内内存溢出虚拟机参数设置运行服务端还没开启客户端开启客户端visualvm看内存使用情况visualvm看内存对象数量visualvm看GC情况堆内内存溢出了visualvm看dump文件最简单解决方法-自己释放最容易内存泄漏的例子客户端代码写个处理器,里面就加这段,就给服务器发送1亿条1:...原创 2020-03-05 22:42:33 · 3084 阅读 · 1 评论 -
吃透Netty源码系列四十九之WebSocket编解码器详解二
吃透Netty源码系列四十九之WebSocket编解码器详解二Utf8FrameValidatorWebSocketServerProtocolHandlerdecodeWebSocketProtocolHandler的decodeWebSocket08FrameEncoder解码器Utf8FrameValidator今天把剩下的一些说下,这个是验证文本帧是否是UTF8编码的。来看下吧。其实他...原创 2020-03-04 22:09:23 · 1910 阅读 · 0 评论 -
吃透Netty源码系列四十八之WebSocket编解码器详解一
吃透Netty源码系列四十八之WebSocket编解码器详解一WebSocket13FrameDecoder解码器WebSocket08FrameDecoder解码器属性decode解码READING_FIRSTREADING_SECONDprotocolViolation违反协议READING_SIZEMASKING_KEYPAYLOADunmask解码CORRUPTWebSocket13Fr...原创 2020-03-04 22:07:20 · 2043 阅读 · 0 评论 -
吃透Netty源码系列四十七之WebSocketServerProtocolHandler详解
吃透Netty源码系列四十七之WebSocketServerProtocolHandler详解handlerAdded处理器添加事件WebSocketServerProtocolHandshakeHandler的channelReadisNotWebSocketPath验证URLsendHttpResponse发送消息WebSocketServerHandshakerFactory的newHand...原创 2020-03-04 22:06:41 · 11589 阅读 · 0 评论 -
吃透Netty源码系列四十六之WebSocket预备知识
吃透Netty源码系列四十六之WebSocket详解一WebSocket如何使用WebSocket服务端代码WebSocketServerProtocolHandler的handlerAddedWebSocketServerProtocolHandshakeHandler的channelRead将WebSocketServerProtocolHandshakeHandler替换forbiddenH...原创 2020-03-03 22:23:14 · 1083 阅读 · 0 评论 -
吃透Netty源码系列四十五之HttpObjectAggregator详解
吃透Netty源码系列四十五之HttpObjectAggregator详解聚合消息先介绍一下一些属性结构MessageAggregatoracceptInboundMessage判断类型decode真正的聚合HttpObjectAggregator的isStartMessageHttpObjectAggregator的isLastContentMessageHttpObjectAggregator...原创 2020-03-02 21:06:23 · 8440 阅读 · 0 评论 -
吃透Netty源码系列四十四之HttpRequestDecoder详解二
吃透Netty源码系列四十四之HttpRequestDecoder详解二READ_HEADER读取头readHeaders解析头Header的结构READ_VARIABLE_LENGTH_CONTENT读取可变长内容READ_FIXED_LENGTH_CONTENT读取固定长内容READ_CHUNK_SIZE读取块大小getChunkSize获取块尺寸READ_CHUNKED_CONTENT读取块...原创 2020-03-01 22:30:56 · 2195 阅读 · 1 评论 -
吃透Netty源码系列四十三之HttpRequestDecoder详解一
吃透Netty源码系列四十三之HttpRequestDecoder详解一HttpRequestDecoder类结构HttpObjectDecoder基本属性构造函数AppendableCharSequence 可添加的字符序列HeaderParser头解析器process哪里用到呢forEachByteforEachByteAsc0LineParser行解析器decode解码检查并略过控制字符SK...原创 2020-03-01 22:30:18 · 3829 阅读 · 0 评论 -
吃透Netty源码系列四十二之Http处理预备知识
吃透Netty源码系列四十二之Http处理预备知识HTTP的基本知识POST消息体传输方式直接发送消息体块传输HttpRequestDecoder请求解码器HttpObjectAggregator消息聚合器ByteBufHolder对缓冲区的一些操作DecoderResult编码结果DecoderResultProvider编码结果提供器HTTP的基本知识其实这个到处都有,我就讲几点Netty...原创 2020-02-29 20:46:51 · 904 阅读 · 0 评论 -
吃透Netty源码系列四十一之MessageToByteEncoder详解
吃透Netty源码系列四十一之MessageToByteEncoder详解MessageToByteEncoderTypeParameterMatcher空类型参数匹配get获取类型参数匹配器ReflectiveMatcherfind寻找泛型对应的匹配器find0图示结构显示构造函数隐式构造函数write写方法allocateBuffer申请缓冲区最简单的例子MessageToByteEncod...原创 2020-02-27 21:42:44 · 5193 阅读 · 0 评论 -
吃透Netty源码系列四十之CodecOutputList
吃透Netty源码系列四十之CodecOutputListCodecOutputList是什么重要属性回收器线程本地变量CodecOutputListsnewInstance获取CodecOutputList对象构造方法get有检查获取消息对象getUnsafe无检查获取消息对象insert插入对象到指定位置add添加对象到最后add添加对象到指定位置remove删除指定位置的对象clear清空r...原创 2020-02-27 21:42:06 · 1195 阅读 · 1 评论 -
吃透Netty源码系列三十九之固定长度与换行解码器
吃透Netty源码系列三十九之解码器一些子类FixedLengthFrameDecoderLineBasedFrameDecoder属性构造方法解码方法decode内部方法findEndOfLine寻找换行分隔符的位置fail抛出异常图示举例分几个包的的情况分包丢弃的情况FixedLengthFrameDecoder这个比较简单,固定长度解码,只要到了这个长度,就切片这个长度的缓冲区当做一个消...原创 2020-02-26 23:03:16 · 1077 阅读 · 3 评论 -
吃透Netty源码系列三十八之ByteToMessageDecoder详解
吃透Netty源码系列三十八之ByteToMessageDecoder详解ByteToMessageDecoder重要属性MERGE_CUMULATOR合并累加器COMPOSITE_CUMULATOR复合累加器抽象方法decodechannelRead读方法callDecode解码fireChannelRead传递消息列表中的消息decodeRemovalReentryProtection调用子类...原创 2020-02-26 23:02:45 · 6033 阅读 · 3 评论 -
吃透Netty源码系列三十七之编解码器预备知识
吃透Netty源码系列三十七之编解码器预备知识编解码器简介粘包半包问题如何解决粘包半包问题基于可变长度netty的编解码器编解码器简介我们来说说编解码器吧,简单来说就是把一堆数据变成另一堆,但是也变回来,在我们netty里,大多数就是从字节数组变成消息对象,或者一种类型的对象变成另一种。但是在网络传输中,编解码器就不是那么简单了,因为网络环境复杂,涉及很多通信机制,会使得你收到的数据不一定就是...原创 2020-02-26 23:02:08 · 473 阅读 · 0 评论 -
NIO源码系列之Selector史上最详细分析三
NIO源码系列之Selector史上最详细分析三选择器注册serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);findKey(Selector sel)register(AbstractSelectableChannel ch, int ops, Object attachment)interestOps(int ops)s...原创 2020-02-03 21:24:44 · 786 阅读 · 0 评论 -
NIO源码系列之Selector史上最详细分析二
NIO源码系列之Selector史上最详细分析二windows下的非阻塞设置windows下的selectpollAddressLiuux下的Epoll总结windows下的非阻塞设置在NIO里面,我们设置一般都会用非阻塞,也就是这样设置erverSocketChannel.configureBlocking(false);.,具体他做了什么呢,我们一起来看看,最终可以跟到一个JNI的本地方法...原创 2020-02-03 21:24:05 · 900 阅读 · 0 评论 -
NIO源码系列之Selector史上最详细分析一
NIO源码系列之Selector史上最详细分析Linux里的select函数Linux里的select函数在讲NIO里的Selector之前,我觉得有必要先有预先的知识铺垫,否则很难理解NIO的Selector在做什么。所以打算先讲下Linux的select,我们可以在Linux中用命令man select查看这个函数,我截取了一些:/* According to POSIX.1-2001...原创 2020-02-03 21:23:20 · 1309 阅读 · 1 评论 -
吃透Netty源码系列三十六之CompositeByteBuf详解二
吃透Netty源码系列三十六之CompositeByteBuf详解二removeComponent删除组件getByte获取数据findComponent查找组件findIt二分查找iterator获取缓冲区迭代器isDirect是否是直接缓冲区capacity有多少可读字节deallocate释放缓冲区根据组件数量来判断的方法removeComponent删除组件前一篇讲了新增操作,接下来讲...原创 2020-02-25 22:26:35 · 869 阅读 · 0 评论 -
吃透Netty源码系列三十五之CompositeByteBuf详解一
吃透Netty源码系列三十五之CompositeByteBuf详解CompositeByteBuf内部结构Component构造方法主要方法CompositeByteBuf重要属性CompositeByteBuf构造方法addComponent(ByteBuf buffer)addComponent0CompositeByteBuf简单来说就是各种缓冲区的组合,就是把他们封装到一个缓冲区,或者...原创 2020-02-25 22:26:07 · 2209 阅读 · 7 评论 -
吃透Netty源码系列三十四之PooledByteBuf相关补充
吃透Netty源码系列三十四之PooledByteBuf相关简介PooledByteBuf主要属性PooledHeapByteBufPooledDirectByteBufPooledUnsafeDirectByteBufPooledUnsafeHeapByteBufPooledByteBuf前面介绍了一大堆内存管理,对象池的东西,就是为了讲这个,现在再去理解容易多了。跟前面的Unpoole...原创 2020-02-23 22:05:37 · 1382 阅读 · 0 评论 -
吃透Netty源码系列三十三之Recycler细节解析二
吃透Netty源码系列三十三之Recycler细节解析二RECYCLER.get()stack.pop()Stack有对象的情况Stack没有对象的情况(后面讲)RECYCLER.get()获取对象,看看里面是怎么样实现的,我们讨论启用缓存的情况。 public final T get() { if (maxCapacityPerThread == 0) {//如果不启用,...原创 2020-02-22 21:31:19 · 698 阅读 · 0 评论 -
吃透Netty源码系列三十二之Recycler细节解析一
吃透Netty源码系列三十二之Recycler细节解析一Recycler一些配置属性简单例子入手Recycler初始化DELAYED_RECYCLEDthreadLocalStack构造方法处理器回收recycle(this)stack.pushpushNow当前线程是Stack的所属线程dropHandlepushLater当前线程不是Stack的所属线程newWeakOrderQueue创建队...原创 2020-02-22 21:30:40 · 873 阅读 · 0 评论 -
吃透Netty源码系列三十一之回收器Recycler预备知识
吃透Netty源码系列三十一之回收器Recycler回收器和对象池Handle接口创建对象池Recycler每个线程能独立的存取数据回收器和对象池回收器,就是来回收对象的,对象池,就是来存储对象复用的。为了跟对象池配合,使得对象池只是作为一个获取对象的实体,只要接受对象创建器即可,其他的不用管,而且将对象池如何存取的实现剥离到了回收器里,如果要改变具体存取方案,只要更换回收器即可,其实也是一种...原创 2020-02-22 21:29:48 · 758 阅读 · 0 评论 -
吃透Netty源码系列三十之内存分配角色结构图
吃透Netty源码系列三十之内存分配角色结构图PooledByteBufAllocatorPoolThreadCachePoolSubpagePoolChunkPoolChunk的depthMap树形表示PoolChunk的memoryMap树形表示PoolChunkListPoolArenaPooledByteBufAllocatorPoolThreadCachePoolSubpage...原创 2020-02-20 22:16:31 · 593 阅读 · 3 评论 -
吃透Netty源码系列二十九之池化内存分配总结
吃透Netty源码系列二十九之池化内存分配总结申请缓冲区创建PoolThreadLocalCache创建PoolThreadCache获取线程本地变量的PoolArena进行分配尝试用缓存来分配缓存分配失败,走正常分配流程释放缓冲区创建实体放入队列释放块防止内存泄露的措施申请缓冲区今天在来总结下内存分配中的几个主要的角色。这个就是我们用的池化内存分配器,里面会进行很多参数的配置,这些参数的默认...原创 2020-02-20 22:15:07 · 801 阅读 · 0 评论 -
吃透Netty源码系列二十八之PoolThreadCache二
吃透Netty源码系列二十八之PoolThreadCache二PoolArena的freePoolThreadCache的addcacheMemoryRegionCache的addPoolThreadCache的trimMemoryRegionCache的trimfreefreeEntryPoolArena的freeChunkPoolChunkList的freePoolChunk的freePool...原创 2020-02-19 22:14:40 · 743 阅读 · 0 评论 -
吃透Netty源码系列二十七之PoolThreadCache一
吃透Netty源码系列二十七之PoolThreadLocalCachePoolThreadLocalCachePoolThreadLocalCache原创 2020-02-19 22:14:04 · 1118 阅读 · 0 评论 -
吃透Netty源码系列二十六之FastThreadLocal二
吃透Netty源码系列二十六之FastThreadLocal二FastThreadLocal构造方法setsetKnownNotUnsetaddToVariablesToRemoveremoveremoveFromVariablesToRemovegetinitializegetIfExistsdestroyremoveAllFastThreadLocalThreadFastThreadLoca...原创 2020-02-18 22:54:46 · 660 阅读 · 0 评论 -
吃透Netty源码系列二十五之FastThreadLocal一
吃透Netty源码系列二十五之池化内存分配六PoolChunk的initBufPoolChunk的initBuf原创 2020-02-18 22:54:08 · 822 阅读 · 0 评论