随笔分类 - Netty
摘要:目录: 1. 粘包 & 拆包及解决方案 ByteToMessageDecoder 2. 基于长度编解码器 3. 基于分割符的编解码器 4. google 的 Protobuf 序列化介绍 5. 其他的 前言 Netty 作为一个网络框架,对 TCP 连接中的问题都做了全面的考虑,比如粘包拆包导致的半
阅读全文
摘要:目录: 1. dubbo 的 Consumer 消费者如何使用 Netty 2. dubbo 的 Provider 提供者如何使用 Netty 3. 总结 前言 众所周知,国内知名框架 Dubbo 底层使用的是 Netty 作为网络通信,那么内部到底是如何使用的呢?今天我们就来一探究竟。 1. du
阅读全文
摘要:前言:Netty 提供的心跳介绍 Netty 作为一个网络框架,提供了诸多功能,比如我们之前说的编解码,Netty 准备很多现成的编解码器,同时,Netty 还为我们准备了网络中,非常重要的一个服务 心跳机制。通过心跳检查对方是否有效,这在 RPC 框架中是必不可少的功能。 Netty 提供了 Id
阅读全文
摘要:前言 我们知道,Java 创建一个实例的消耗是不小的,如果没有使用栈上分配和 TLAB,那么就需要使用 CAS 在堆中创建对象。所以现在很多框架都使用对象池。Netty 也不例外,通过重用对象,能够避免频繁创建对象和销毁对象带来的损耗。 来看看具体实现。 1. Recycler 抽象类简介 该类 d
阅读全文
摘要:Netty 解码器抽象父类 ByteToMessageDecoder 源码解析
阅读全文
摘要:前言 在 "Netty 源码剖析之 unSafe.read 方法" 一文中,我们研究了 read 方法的实现,这是读取内容到容器,再看看 Netty 是如何将内容从容器输出 Channel 的吧。 1. ctx.writeAndFlush 方法 当我们调用此方法时,会从当前节点找上一个 outbou
阅读全文
摘要:目录: 1. NioSocketChannel$NioSocketChannelUnsafe 的 read 方法 2. 首先看 ByteBufAllocator 3. 再看 RecvByteBufAllocator.Handle 4. 两者如何配合进行内存分配 5. 如何读取到 ByteBuf 6.
阅读全文
摘要:目录: 前言 1. ChannelOutboundBuffer 介绍 2. addMessage 方法 3. addFlush 方法 4. flush0 方法 5. 缓冲区扩展思考 6. 总结 每个 ChannelSocket 的 Unsafe 都有一个绑定的 ChannelOutboundBuff
阅读全文
摘要:前言 对于堆外内存,使用 System.gc() 是不靠谱的,依赖老年代 FGC 也是不靠谱的,而且大部分调优指南都设置了 DisableExplicitGC 禁用 System.gc()。所以主动回收比较靠谱, JDK 在 DirectByteBuffer 中提供了 Cleaner 用来主动释放内
阅读全文
摘要:目录大纲: 1. 前言 2. 处理耗时业务的第一种方式 handler 种加入线程池 3. 处理耗时业务的第二种方式 Context 中添加线程池 4. 总结:两种方式的对比和思考 前言 熟悉 Netty 的同学都知道,不能在 Netty 中做耗时的,不可预料的操作,比如数据库,网络请求,这将会严重
阅读全文
摘要:目录大纲: 0. 前言 1. ChannelPipeline | ChannelHandler | ChannelHandlerContext 三巨头介绍 2. 三巨头编织过程(创建过程) 3. ChannelPipeline 是如何调度 handler 的 4. 总结 前言 相信对 Netty 熟
阅读全文
摘要:目录大纲: 1. 前言 2. 针对 Netty 例子源码做了哪些修改? 3. 看 pipeline 是如何将数据送到自定义 handler 的 4. 看 pipeline 是如何将数据从自定义 handler 送出的 5. 总结 前言 在 "Netty 核心组件 Pipeline 源码分析(一)之剖
阅读全文
摘要:前言 在前文 "Netty 启动过程源码分析 (本文超长慎读)(基于4.1.23)" 中,我们分析了整个服务器端的启动过程。在那篇文章中,我们重点关注了启动过程,而在启动过程中对核心组件并没有进行详细介绍,比如 EventLoop ,Pipeline,Unsafe 等。实际上,Netty 的大部分组
阅读全文
摘要:前言 Netty 作为高性能框架,对 JDK 中的很多类都进行了封装了和优化,例如 Thread 类,Netty 使用了 FastThreadLocalRunnable 对所有 DefaultThreadFactory 创建出来的 Runnable 都进行了包装。包装的目的是 run 方法的不同,看
阅读全文
摘要:前言 在前文中,我们分析了服务器是如何启动的。而服务器启动后肯定是要接受客户端请求并返回客户端想要的信息的,否则要你服务器干啥子呢?所以,我们今天就分析分析 Netty 在启动之后是如何接受客户端请求的。 开始吧! 1. 从源头开始 从之前服务器启动的源码中,我们得知,服务器最终注册了一个 Acce
阅读全文
摘要:前言 作为一个 Java 程序员,必须知道Java社区最强网络框架 Netty,且必须看过源码,才能说是了解这个框架,否则都是无稽之谈。今天楼主不会讲什么理论和概念,而是使用debug 的方式,走一遍 Netty (服务器)的启动过程。 1. demo 源码 楼主 clone 的 netty 的源码
阅读全文
摘要:目录: 源码地址:github 地址 前言 众所周知,dubbo 底层使用了 Netty 作为网络通讯框架,而 Netty 的高性能我们之前也分析过源码,对他也算还是比较了解了。今天我们就自己用 Netty 实现一个简单的 RPC 框架。 1. 需求 模仿 dubbo,消费者和提供者约定接口和协议,
阅读全文