摘要:
传统 Linux 中的零拷贝技术 在介绍 Netty 零拷贝特性之前,我们有必要学习下传统 Linux 中零拷贝的工作原理。所谓零拷贝,就是在数据操作时,不需要将数据从一个内存位置拷贝到另外一个内存位置,这样可以减少一次内存拷贝的损耗,从而节省了 CPU 时钟周期和内存带宽。 我们模拟一个场景,从文 阅读全文
摘要:
Netty的Unsafe接口 这个Unsafe不是JDK原生的Unsafe,主要就是一些直接跟IO底层直接相关的通用操作: interface Unsafe { // 接受数据的时候用于分配字节缓冲区的处理器 RecvByteBufAllocator.Handle recvBufAllocHandl 阅读全文
摘要:
ChannelFuture 吧自定义的处理器修改下。 class EchoServerHandler extends ChannelInboundHandlerAdapter { @Override public void channelRead(ChannelHandlerContext ctx, 阅读全文
摘要:
WebSocket编解码器 客户端代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <script type="text/javascript"> 阅读全文
摘要:
POST消息体传输方式 直接发送消息体 最长见的就是直接在POST请求头里设置了Content-Length属性,也就是所谓的定长,只要接收端根据这个去读定长的字节就行,这个方便是方便,但是如果一个比较大的数据,可能要消耗比较大的内存。 块传输 还有一种是Transfer-Encoding: chu 阅读全文
摘要:
编解码器 编解码技术这是实现网络通信的基础,让我们可以定义任何满足业务需求的应用层协议。在网络编程中,我们经常会使用各种网络传输协议,其中 TCP 是最常用的协议。我们首先需要了解的是 TCP 最基本的拆包/粘包问题以及常用的解决方案,才能更好地理解 Netty 的编解码框架。 出现拆包/粘包的原因 阅读全文
摘要:
Selector 之前说过 SingleThreadEventExecutor.this.run(); 方法,里面有段代码 strategy = selectStrategy.calculateStrategy(selectNowSupplier, hasTasks()); 现在详细说明下此方法 @ 阅读全文
摘要:
Recycler 讲回收器之前,先说下对象池,即之前提过的ObjectPool。 public abstract class ObjectPool<T> { //通过对象创建接口和处理器关联,以便于创建的的对象内部可以调用处理器的方法,用来回收对象。 ObjectPool() { } /** * G 阅读全文
摘要:
PoolThreadLocalCache PooledByteBufAllocator 持有 PoolThreadLocalCache 对象,PoolThreadLocalCache 继承 FastThreadLocal<PoolThreadCache>,属于本地线程缓存变量。因此每个线程拥有属于自 阅读全文
摘要:
池化内存分配三 FastThreadLocal 在前面几篇源码解析的课程中,我们都有在源码中发现 FastThreadLocal 的身影。顾名思义,Netty 作为高性能的网络通信框架,FastThreadLocal 是比 JDK 自身的 ThreadLocal 性能更高的通信框架。FastThre 阅读全文