Netty框架
文章平均质量分 77
主要是介绍Netty的介绍和分析
庄小焱
我是庄小焱,某大厂Java高级工程师、PMP项目管理专家、系统架构设计师(高级)、CSDN博文专家。博主在支付交易领域,信贷金融领域深耕,我在博客中分享业务、技术、产品相关知识,欢迎大家和我交流学习。
展开
-
Netty——网络编程基础概念与原理
摘要主要是的哟关于的Netty的一个的基础的知识。https://juejin.cn/post/6921858121774137352NIO 基本概念阻塞(Block)与非阻塞(Non-Block)阻塞和非阻塞是进程在访问数据的时候,数据是否准备就绪的一种处理方式,当数据没有准备的时候。阻塞:往往需要等待缓冲区中的数据准备好过后才处理其他的事情,否则一直等待在那里。非阻塞:当我们的进程访问我们的数据缓冲区的时候,如果数据没有准备好则直接返回,不会等待。如果数据已经准备好,也直接返回。原创 2021-04-02 14:18:31 · 381 阅读 · 0 评论 -
Netty——面试问题集合和总结分析
BIO、NIO和AIO的区别?NIO的组成?Netty的特点?Netty的线程模型?TCP 粘包/拆包的原因及解决方法?了解哪几种序列化协议?如何选择序列化协议?Netty的零拷贝实现?Netty的高性能表现在哪些方面?NIOEventLoopGroup源码?...原创 2021-04-14 15:46:19 · 257 阅读 · 0 评论 -
Netty——Channel的原理与实战
摘要原创 2021-10-28 20:22:04 · 424 阅读 · 0 评论 -
Netty——Buffer的原理与实战
1、rewind()方法Buffer.rewind()将position设回0,所以你可以重读Buffer中的所有数据。limit保持不变,仍然表示能从Buffer中读取多少个元素(byte、char等)。2、clear() 与 compact() 方法一旦读完Buffer中的数据,需要让Buffer准备好再次被写入。可以通过clear()或compact()方法来完成。如果调用的是clear()方法,position将被设回0,limit被设置成 capacity的值。换句话说,Buff.原创 2021-10-27 22:25:48 · 877 阅读 · 0 评论 -
Netty——Selector的原理与实战
摘要原创 2021-10-28 20:22:53 · 1284 阅读 · 0 评论 -
Netty——Netty模型与Reactor模型原理与实战
摘要根据Reactor的数量和处理资源池线程的数量不同,有3种典型的实现单Reactor单线程;单Reactor多线程;主从Reactor多线程。为了更好的理解有关以reactor模型的原理:单Reactor单线程,前台接待员和服务员是同一个人,全程为顾客服 单Reactor多线程,1个前台接待员,多个服务员,接待员只负责接待 主从Reactor多线程,多个前台接待员,多个服务生Netty模型模型说明:Netty抽象出两组线程池BossGroup专门负责接收客户端的连接,Worke原创 2021-11-07 08:15:54 · 326 阅读 · 0 评论 -
Netty——异步(Future-Callback)模型的原理解析
摘要异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的组件在完成后,通过状态、通知和回调来通知调用者。 Netty中的I/O操作是异步的,包括 Bind、Write、Connect等操作会简单的返回一个ChannelFuture。 调用者并不能立刻获得结果,而是通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。 Netty的异步模型是建立在future和 callback的之上的。callback就是回调。重点说原创 2021-11-07 15:29:13 · 862 阅读 · 0 评论 -
Netty——TaskQueue与ScheduleTaskQueue源码解析
摘要任务队列中的Task有3种典型使用场景用户程序自定义的普通任务。 用户自定义定时任务。 非当前Reactor线程调用Channel的各种方法:例如在推送系统的业务线程里面,根据用户的标识,找到对应的 Channel引用,然后调用Write类方法向该用户推送消息,就会进入到这种场景。最终的 Write 会提交到任务队列中后被异步消费。源码解析用户程序自定义的普通任务package com.zhuangxiaoyan.netty.server;import io.netty.原创 2021-11-07 11:16:55 · 280 阅读 · 0 评论 -
Netty——BootStrap源码分析
摘要BootStrap在netty的应用程序中负责引导服务器和客户端。netty包含了两种不同类型的引导:1. 使用服务器的ServerBootStrap,用于接受客户端的连接以及为已接受的连接创建子通道。 2. 用于客户端的BootStrap,不接受新的连接,并且是在父通道类完成一些操作。服务端的代码SimpleServer.java/** * Created by xjl on 2021/1/9. */public final class SimpleServer {原创 2021-11-09 09:39:02 · 240 阅读 · 0 评论 -
Netty——NioEventLoopGroup源码分析
摘要提到Netty首当其冲被提起的肯定是支持它承受高并发的线程模型,说到线程模型就不得不提到NioEventLoopGroup这个线程池。线程模型Netty的线程模型被称为Reactor模型,具体如图所示,图上的mainReactor指的就是bossGroup,这个线程池处理客户端的连接请求,并将accept的连接注册到subReactor的其中一个线程上;图上的subReactor当然指的就是workerGroup,负责处理已建立的客户端通道上的数据读写;图上还有一块ThreadPool是具体原创 2021-11-09 09:20:24 · 262 阅读 · 0 评论 -
Netty——WebSocket原理与实践
摘要WebSocket是一种为了提高Web应用程序的性能以及响应性而开发的先进的网络协议。WebSocket 协议是完全重新设计的协议,旨在为Web 上的双向数据传输问题提供一个切实可行的解决方案,使得客户端和服务器之间可以在任意时刻传输消息,因此,这也就要求它们异步地处理消息回执。(作为HTML5 客户端API 的一部分,大部分最新的浏览器都已经支持了WebSocket。)...原创 2021-11-07 12:01:52 · 343 阅读 · 0 评论 -
Netty——服务器启动ChannelFuture源码分析
摘要本博文主要分析服务器的启动的源码,主要分析ChannelFuture f = b.bind(8888).sync()原理。服务器启动代码/** * Created by chenhao on 2019/9/4. */public final class SimpleServer { public static void main(String[] args) throws Exception { EventLoopGroup bossGroup = new原创 2021-11-09 18:49:59 · 818 阅读 · 0 评论 -
Netty——数据序列化协议与反序列化原理
摘要序列化和反序列化几乎是工程师们每天都要面对的事情,但是要精确掌握这两个概念并不容易:一方面,它们往往作为框架的一部分出现而湮没在框架之中;另一方面,它们会以其他更容易理解的概念出现,例如加密、持久化。然而,序列化和反序列化的选型却是系统设计或重构一个重要的环节,在分布式、大数据量系统设计里面更为显著。恰当的序列化协议不仅可以提高系统的通用性、强健性、安全性、优化系统性能,而且会让系统更加易于调试、便于扩展。本文从多个角度去分析和讲解“序列化和反序列化”,并对比了当前流行的几种序列化协议,期望对读者做原创 2021-11-10 09:50:17 · 1078 阅读 · 0 评论 -
Netty——客户端Accpt源码分析
摘要本博文将介绍netty如何接受新的请求,netty如何给新请求分配reactor线程,netty如何给每个新连接增加ChannelHandler。netty中的reactor线程netty中最核心的东西莫过于两种类型的reactor线程,可以看作netty中两种类型的发动机,驱动着netty整个框架的运转。一种类型的reactor线程是boos线程组,专门用来接受新的连接,然后封装成channel对象扔给worker线程组;还有一种类型的reactor线程是worker线程组,专门用来处理连原创 2021-11-12 22:23:24 · 519 阅读 · 0 评论 -
Netty——编码器和解码器的源码分析
摘要编码器和解码器原理图原创 2021-11-11 09:02:49 · 385 阅读 · 0 评论 -
Netty——Read过程源码分析
摘要将分析一下work线程中的read过程,其中涉及到零拷贝技术的及其源码分析。Read codeprivate static void processSelectedKey(SelectionKey k, AbstractNioChannel ch) { final NioUnsafe unsafe = ch.unsafe(); //检查该SelectionKey是否有效,如果无效,则关闭channel if (!k.isValid()) { // c原创 2021-11-13 11:00:27 · 365 阅读 · 0 评论 -
Netty——ChannelPipline源码分析
摘要netty在服务端端口绑定和新连接建立的过程中会建立相应的channel,而与channel的动作密切相关的是pipeline这个概念,pipeline像是可以看作是一条流水线,原始的原料(字节流)进来,经过加工,最后输出。我们已经知道了创建NioSocketChannel的时候会将netty的核心组件创建出来。pipeline基本结构pipeline是其中的一员,在下面这段代码中被创建。由双链表组成。NioSocketChannel中保存了pipeline的引用。protecte原创 2021-11-12 21:59:34 · 589 阅读 · 0 评论 -
Netty——Write过程源码分析
摘要本文主要是分析Ntty过程中的write和writeAndFlush源码过程。本文分以下几个部分阐述一个java对象最后是如何转变成字节流,写到socket缓冲区中去的。pipeline中的标准链表结构 java对象编码过程 write:写队列 flush:刷新写队列 writeAndFlush: 写队列并刷新pipeline中的标准链表结构数据从head节点流入,先拆包,然后解码成业务对象,最后经过业务Handler处理,调用write,将结果对象写出去。而写的过程先通过ta原创 2021-11-13 12:11:21 · 805 阅读 · 0 评论 -
Netty——TCP粘包和拆包原理
摘要TCP是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端)都要有——成对的socket,因此,发送端为了将多个发给接收端的包,更有效的发给对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包。这样做虽然提高了效率,但是接收端就难于分辨出完整的数据包了,因为面向流的通信是无消息保护边界的。由于TCP无消息保护边界,需要在接收端处理消息边界问题,也就是我们所说的粘包、拆包问题。粘包、拆包原理假设客户端分别发送了两个数据包原创 2021-11-11 11:26:49 · 1429 阅读 · 0 评论 -
Netty——拆包LineBasedFrameDecoder源码分析
摘要Netty 自带多个粘包拆包解码器。今天介绍 LineBasedFrameDecoder,换行符解码器。行拆包器这个类叫做LineBasedFrameDecoder,基于行分隔符的拆包器,TA可以同时处理\n以及\r\n两种类型的行分隔符,核心方法都在继承的decode方法中。protected final void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exce...原创 2021-11-13 17:13:09 · 1106 阅读 · 0 评论 -
Netty——心跳服务IdleStateHandler源码分析
摘要心跳说的是在客户端和服务端在互相建立ESTABLISH状态的时候,如何通过发送一个最简单的包来保持连接的存活,还有监控另一边服务的可用性等。本文主要是研究netty的心跳机制的原理。心跳服务的作用 保活 Q:为什么说心跳机制能保持连接的存活,它是集群中或长连接中最为有效避免网络中断的一个重要的保障措施? A:之所以说是“避免网络中断的一个重要保障措施”,原因是:我们得知公网IP是一个宝贵的资源,一旦某一连接长时间的占用并且不发数据,这怎能对得起网络给此连接分配公网IP,这简直是对网络资原创 2021-11-13 16:17:19 · 551 阅读 · 0 评论 -
Netty——NIO群聊功能实战
摘要功能原理图服务器端package com.zhuangxiaoyan.nio.groupchat;import java.io.IOException;import java.net.InetSocketAddress;import java.net.ServerSocket;import java.nio.ByteBuffer;import java.nio.channels.*;import java.util.Iterator;/** * @Classna原创 2021-11-05 00:04:34 · 170 阅读 · 0 评论 -
Netty——Netty群聊功能实战
摘要sever代码实例GroupChatServer.javapackage com.zhuangxiaoyan.netty.groupchat;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.*;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.SocketChannel;import io原创 2021-11-09 22:10:22 · 191 阅读 · 0 评论 -
Netty——学习资料总结集
摘要我个人的理解毕竟有限,或者是存在一些见解的错误,因此我将在每一个分类中都设置本人绝说的好的文章链接。供大家学习和参考。相关文章netty源码分析之揭开reactor线程的面纱(一) - 简书...原创 2021-11-06 10:47:55 · 280 阅读 · 0 评论