随笔分类 -  netty源码解析

摘要:什么是心跳机制? 心跳说的是在客户端和服务端在互相建立ESTABLISH状态的时候,如何通过发送一个最简单的包来保持连接的存活,还有监控另一边服务的可用性等。 心跳包的作用 保活Q:为什么说心跳机制能保持连接的存活,它是集群中或长连接中最为有效避免网络中断的一个重要的保障措施?A:之所以说是“避免网 阅读全文
posted @ 2019-09-25 15:26 chen_hao 阅读(2548) 评论(0) 推荐(2) 编辑
摘要:本篇文章主要是介绍使用LengthFieldBasedFrameDecoder解码器自定义协议。通常,协议的格式如下: LengthFieldBasedFrameDecoder是netty解决拆包粘包问题的一个重要的类,主要结构就是header+body结构。我们只需要传入正确的参数就可以发送和接收 阅读全文
posted @ 2019-09-23 11:13 chen_hao 阅读(7902) 评论(3) 推荐(3) 编辑
摘要:Netty 自带多个粘包拆包解码器。今天介绍 LineBasedFrameDecoder,换行符解码器。 行拆包器 下面,以一个具体的例子来看看业netty自带的拆包器是如何来拆包的 这个类叫做 LineBasedFrameDecoder,基于行分隔符的拆包器,TA可以同时处理 \n以及\r\n两种 阅读全文
posted @ 2019-09-20 11:07 chen_hao 阅读(1287) 评论(0) 推荐(3) 编辑
摘要:Netty 的解码器有很多种,比如基于长度的,基于分割符的,私有协议的。但是,总体的思路都是一致的。 拆包思路:当数据满足了 解码条件时,将其拆开。放到数组。然后发送到业务 handler 处理。 半包思路: 当读取的数据不够时,先存起来,直到满足解码条件后,放进数组。送到业务 handler 处理 阅读全文
posted @ 2019-09-19 11:07 chen_hao 阅读(1737) 评论(0) 推荐(1) 编辑
摘要:上一篇文章主要讲了netty的read过程,本文主要分析一下write和writeAndFlush。 主要内容 本文分以下几个部分阐述一个java对象最后是如何转变成字节流,写到socket缓冲区中去的 pipeline中的标准链表结构 一个标准的pipeline链式结构如下 数据从head节点流入 阅读全文
posted @ 2019-09-16 11:12 chen_hao 阅读(2043) 评论(0) 推荐(3) 编辑
摘要:在上一篇文章中,我们分析了processSelectedKey这个方法中的accept过程,本文将分析一下work线程中的read过程。 该方法主要是对SelectionKey k进行了检查,有如下几种不同的情况 1)OP_ACCEPT,接受客户端连接 2)OP_READ, 可读事件, 即 Chan 阅读全文
posted @ 2019-09-12 11:01 chen_hao 阅读(1538) 评论(0) 推荐(2) 编辑
摘要:通读本文,你会了解到1.netty如何接受新的请求2.netty如何给新请求分配reactor线程3.netty如何给每个新连接增加ChannelHandler netty中的reactor线程 netty中最核心的东西莫过于两种类型的reactor线程,可以看作netty中两种类型的发动机,驱动着 阅读全文
posted @ 2019-09-11 10:52 chen_hao 阅读(2089) 评论(0) 推荐(2) 编辑
摘要:在上一篇文章中,我们已经了解了pipeline在netty中所处的角色,像是一条流水线,控制着字节流的读写,本文,我们在这个基础上继续深挖pipeline在事件传播 Unsafe 顾名思义,unsafe是不安全的意思,就是告诉你不要在应用程序里面直接使用Unsafe以及他的衍生类对象。 netty官 阅读全文
posted @ 2019-09-10 15:53 chen_hao 阅读(1902) 评论(0) 推荐(1) 编辑
摘要:netty在服务端端口绑定和新连接建立的过程中会建立相应的channel,而与channel的动作密切相关的是pipeline这个概念,pipeline像是可以看作是一条流水线,原始的原料(字节流)进来,经过加工,最后输出 pipeline 初始化 在上一篇文章中,我们已经知道了创建NioSocke 阅读全文
posted @ 2019-09-09 11:15 chen_hao 阅读(1701) 评论(1) 推荐(3) 编辑
摘要:本文接着前两篇文章来讲,主要讲服务端类剩下的部分,我们还是来先看看服务端的代码 在前面两篇博文中从源码的角度分析了如下几行代码主要做了哪些工作。 本篇博文将从源码的角度分析ChannelFuture f = b.bind(8888).sync() 的内部实现。这样就完成了Netty服务器端启动过程的 阅读全文
posted @ 2019-09-06 11:15 chen_hao 阅读(1780) 评论(0) 推荐(1) 编辑
摘要:BootStrap在netty的应用程序中负责引导服务器和客户端。netty包含了两种不同类型的引导: 1. 使用服务器的ServerBootStrap,用于接受客户端的连接以及为已接受的连接创建子通道。 2. 用于客户端的BootStrap,不接受新的连接,并且是在父通道类完成一些操作。 一般服务 阅读全文
posted @ 2019-09-05 15:32 chen_hao 阅读(2208) 评论(0) 推荐(1) 编辑
摘要:提到Netty首当其冲被提起的肯定是支持它承受高并发的线程模型,说到线程模型就不得不提到NioEventLoopGroup这个线程池,接下来进入正题。 线程模型 首先来看一段Netty的使用示例 下面将分析第一、二行代码,看下NioEventLoopGroup类的构造函数干了些什么。其余的部分将在其 阅读全文
posted @ 2019-09-04 16:07 chen_hao 阅读(4934) 评论(1) 推荐(4) 编辑