Netty系列
文章平均质量分 95
TheLudlows
这个世界上还有什么比自己写的代码运行在一亿的电脑上更酷的事情吗,如果有那就是让这个数字再扩大十倍。
展开
-
Netty相关文章目录汇总
半年前开始写Netty的文章,对自己来说是一个温故的过程,也是学习的过程。好了!Netty目录如下:基础篇,API的了解和基本的使用:1. Netty基础:概念介绍2. Netty基础:第一个Netty程序3. Netty基础:Netty的关键组件4. Netty基础:Netty中的传输5. Netty基础:ByteBuf详解6. Netty基础:细说ChannelHandler和...原创 2018-12-13 18:29:23 · 3566 阅读 · 3 评论 -
Netty基础:ByteBuf详解
1.ByteBuf与NIO中的ByteBuffer类似,Netty中以ByteBuf作为它的字节容器。ByteBuf相当于ByteBuffer的升级。有兴趣可以看一看>>之前NIO中的ByteBuffer的文章 ByteBuf维护了两个不同的索引:一个用于读取,一个用于写入。读取时,读索引hi递增读取的字节数。写入时,写索引会递增写入的字节数。初始时两个索引都为0。当两个索引...原创 2018-03-09 18:07:08 · 4911 阅读 · 0 评论 -
Netty 进阶:write流程全解析
文章目录1. ChannelOutboundBuffer1.1 ChannelOutboundBuffer概述1.2 AddMessage1.3 addFlushwrite&flush1. ChannelOutboundBuffer1.1 ChannelOutboundBuffer概述在分析write前,有必要介绍一下ChannelOutboundBuffer,顾名思义该类是用来缓存...原创 2018-11-12 19:36:34 · 3017 阅读 · 1 评论 -
Netty进阶:自顶向下解析FastThreadLocal
引子 1FastThreadLocalThread我们知道EventLoopGroup相当于线程池,而EventLoop是其中的线程,用来执行IO任务和一些handler中的业务逻辑。在Netty进阶:Netty核心NioEventLoop原理解析文章中详解的介绍了EventLoopGroup和EventLoop的构造过程,以及他们如何去执行IO任务等。但是关于NioEventLoop中持有的...原创 2018-12-26 19:44:04 · 2096 阅读 · 2 评论 -
零拷贝的前世今生
文章目录1. 操作系統中的零拷贝1.1 操作系统零拷贝的分类1.2 避免内核空间和用户空间拷贝的实现2. Java NIO中零拷贝2.1 map2.2 transferTo2.3 DirectByteBuffer3. Netty中零拷贝3.1 CompositeByteBuf3.2 wrap3.3 slice1. 操作系統中的零拷贝摘自WikiZero-copy" describes co...原创 2018-12-21 18:32:41 · 779 阅读 · 0 评论 -
Netty内存管理深度解析(上)
文章目录概述1. PoolChunk1.1 Buddy算法1.2 PoolChunk初始化1.3 分配2. PoolSubPage3. 分配小于PageSize3. PoolChunkList4. PoolArena总结概述上篇文章中对Netty的内存分配进行大体的阐述,提到了Netty内存分配通过Arena来进行,并且配合对象池化技术(Recycle)来提高效率。关于池化技术在后面的文章中做...原创 2019-01-10 23:56:26 · 1383 阅读 · 0 评论 -
Netty对象池技术Recycler解析
文章目录1. Recycler是什么?2. 源码分析2.1 Stack2.2Handle2.3WeakOrderQueue2.4 get获取流程2.5 recycle 回收流程3. 性能测试1. Recycler是什么?Recycler是Netty提供的一款轻量级线程局部对象池工具,在前面的文章中也提到过,比如ChannelOutboundBuffer.Entry 、ByteBuf都是基于Re...原创 2019-01-23 19:27:54 · 1364 阅读 · 0 评论 -
Netty内存管理深度解析(下)
文章目录概述1. PoolChunk1.1 Buddy算法1.2 PoolChunk初始化1.3 分配2. PoolSubPage3. 分配和释放4. PoolChunkList5. PoolArena概述1. PoolChunk1.1 Buddy算法1.2 PoolChunk初始化1.3 分配2. PoolSubPage3. 分配和释放上面的内容见上文:Netty内存管理深度解析...原创 2019-01-14 18:23:37 · 894 阅读 · 0 评论 -
Netty内存管理概述
文章目录1. 内存管理概述2. 分配算法概述2.2 SubPage3. ByteBufAllocator3.1 UnPooledByteBufAllocator3.2 PooledByteBufAllocator1. 内存管理概述内存管理的主要目的合理分配内存,减少内存碎片,及时回收资源,提高内存的使用效率。从操作系统层面来说,各个软件在运行时向操作系统请求对计算机内存资源进行快速的分配,...原创 2019-01-09 12:53:37 · 1513 阅读 · 0 评论 -
如何实现性能不错的RPC框架
文章目录1. RPC 结构拆解2. 协议3. 序列化4. Client代理5.通信传输不足1. RPC 结构拆解RPC主要流程如下图:RPC 服务提供者通过 Service Register 发布到注册中心,同时暴露在本地。消费者通过Service Register拉去服务的列表,并且保存至本地缓存。客户方像调用本地方法一样去调用远程接口方法,RPC 框架提供接口的代理实现,实际的调用...原创 2019-03-11 16:30:06 · 604 阅读 · 0 评论 -
时间轮HashedWheelTimer原理
How to Use?和计划任务线程池ScheduledThreadPoolExecutor的功能类似,HashedWheelTimer也提供了延时执行的功能。前者基于延时队列,而后者基于时间轮实现。先看它的使用方式。HashedWheelTimer hashedWheelTimer = new HashedWheelTimer(100, TimeUnit.MILLISECONDS);has...原创 2019-04-08 15:53:42 · 1820 阅读 · 0 评论 -
Netty实战:心跳检测
1. 基本概念1.1 TCP长连接和短连接TCP区别于UDP最重要的特点是TCP必须建立在可靠的连接之上,连接的建立和释放就是握手和挥手的过程。三次握手为连接的建立过程,握手失败则连接建立失败。四次挥手为连接的完整释放过程,也会发生某个消息丢失或者超时的情况,有一方主动发送FIN消息即表示连接即将释放。长连接,也叫持久连接,在TCP层握手成功后,不立即断开连接,并在此连接的基础上进行多次消息...原创 2018-11-09 00:21:13 · 2722 阅读 · 8 评论 -
Netty进阶:Futrue&Promise源码解析
并发编程中,我们通常会用到一组非阻塞的模型:Future 和 Callback、Promise。其中的 Future 表示一个可能还没有实际完成的异步任务的结果,针对这个结果可以添加 Callback 以便在任务执行成功或失败后做出对应的操作,而Promise交由任务执行者,任务执行者通过 Promise 可以标记任务完成或者失败。 这一套模型是很多异步非阻塞架构的基础。JDK中实现了Futur...原创 2018-10-29 19:24:00 · 647 阅读 · 0 评论 -
Netty进阶:浅析Read事件的处理过程
文章目录1.read2. ByteBufAllocator3.Handle4. allocate5. 读取到ByteBuf总结上篇文章讲述了Accept事件的处理过程,本文将详细分析Read过程中的细节。按照accept事件的思路,当读事件进来的时候,会调用 unsafe 的 read 方法,这个方法的主要作用是读取 Socket 缓冲区的内存,并包装成 Netty 的 ByteBuf 对象,最...原创 2018-10-26 00:04:30 · 3491 阅读 · 3 评论 -
Netty基础:编/解码器、粘包/拆包详解
1.编码器和解码器编码器操作出站数据,而解码器处理入站数据。在网络中数据以字节流的格式传输。编码器和解码器就是将消息装换为字节格式或者将字节格式数据转换为消息格式。消息格式可能是字符、对象等。2解码器解码器是负责将入站数据从一种格式转换到另一种格式,所以可以理解解码器实现了ChannelInboundHandler。Netty中常见的解码器有ByteToMessageDec...原创 2018-03-23 18:41:06 · 984 阅读 · 0 评论 -
Netty基础:BootStrap介绍/代理服务器实现
了解了了ChannelPipeline、ChannelHandler和 EventLoop之后,如何将这些零件组织起来呢?答案就是今天说的引导(Bootstrap)1.Bootstrap引导类的层次结构: 可以看到不管是服务器引导还是客户端引导都继承了Channel接口,很显然,服务器致力于使用一个父Channel来接受来自客户端的连接,并创建子Channel以用于它们之间的...原创 2018-03-21 20:47:53 · 1707 阅读 · 0 评论 -
Netty进阶:ServerBootStrap源码分析之服务端启动过程
Netty源码分析1.服务端创建流程Netty 服务端创建的时序图: 主要步骤为:创建 ServerBootstrap 实例设置并绑定 Reactor 线程池设置并绑定服务端 Channel创建并初始化 ChannelPipeline添加并设置 ChannelHandler绑定并启动监听端口代码public class NettyServer { ...原创 2018-07-28 16:09:13 · 889 阅读 · 0 评论 -
Netty实战:HTTPS传输原理分析及Netty的实现
1.目录通过 SSL/TLS 保护 Netty 应用程序构建基于 Netty 的 HTTP/HTTPS 应用程序处理空闲的连接和超时解码基于分隔符的协议和基于长度的协议写大型数据1.从SSL/TLS说起众所周知HTTP是超文本传输协议,信息是明文传输,因此就有了HTTPS(Hyper Text Transfer Protocol over Secure Socket L...原创 2018-09-03 22:44:50 · 4113 阅读 · 3 评论 -
Netty进阶:NioServerSocketChannel源码分析
1.准备ChannelFactory2. 在哪实例化NioServerSocketChannel?3. 构造函数链4. newUnsafe();5. newChannelPipeline();小结1.准备ChannelFactoryNetty服务端的ServerBootstrap引导类的channel方法来指定channel类型,并且在bind...原创 2018-09-10 12:38:25 · 974 阅读 · 0 评论 -
Netty进阶:客户端连接源码分析
1. BootStrap启动代码客户端方面的代码开始EventLoopGroup group = new NioEventLoopGroup();try { Bootstrap b = new Bootstrap(); b.group(group) .channel(NioSocketChannel.class) .option(ChannelOp...原创 2018-09-14 19:56:04 · 548 阅读 · 0 评论 -
Netty进阶:Pilpeline源码分析
在上篇文章中提到每个SocketCahnnel或者ServerSocketChannel的父类AbstractChannel的构造函数中会实例化DefaultChannelPipeline。在本文中会详细的介绍ChannelPiple实例化过程中的细节、以及ChannelPiple的工作原理。1. ChannelPiple的实例化细节首先来看看DefaultChannelPipeli...原创 2018-09-15 12:51:28 · 952 阅读 · 0 评论 -
Netty进阶:Netty核心NioEventLoop原理解析
文章目录1. NioEventLoopGroup2. NioEventLoop2.1实例化过程2.2 关联EventLoop3. EventLoop的任务处理机制3.1 register任务3.2 执行任务Netty提供了Java NIO Reactor模型的实现,之前写过一篇文章是对三种Reactor模式的简单实现:Reactor模型的Java NIO实现,当然netty中的实现要复杂的多。并...原创 2018-10-07 20:49:37 · 5387 阅读 · 6 评论 -
Netty进阶:细说Accept事件的处理过程
接着上篇NioEventLoop遗留的问题,Accept事件和Read事件。当前selectionKey发生的事件是SelectionKey.OP_ACCEPT或者SelectionKey.OP_READ,执行unsafe的read方法。NioUnsafe的多态说到unsafe,其实在NioServerSocketChannel中提到过,Unsafe是定义在Channel中的接口,看看它的实...原创 2018-10-18 23:40:11 · 2058 阅读 · 0 评论 -
Netty解读:高性能无锁队列Jctools源码分析
文章目录JDK BlockingQueue队列概述MpscArrayQueueofferpollMpscCompoundQueueofferpollMpscChunkedArrayQueueofferpoll优化总结lazy set大量的位运算伪共享无锁测试代码地址扩展阅读JDK BlockingQueue队列概述在Java中用的最多的也就是BlockingQueue,所谓的Blocking就...原创 2019-05-28 20:13:43 · 4423 阅读 · 0 评论