![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Netty玩起来
文章平均质量分 84
netty真的很好玩
越来越没意思
辉煌时刻已经结束
展开
-
网络的模型
在《UNIX网络编程》一书中,总结归纳了5种IO模型:1、阻塞IO()2、非阻塞IO(IO)3、IO多路复用()4、信号驱动IO()5、异步IO()顾名思义,阻塞IO就是两个阶段都必须阻塞等待:阶段一:①用户进程尝试读取数据(比如网卡数据)②此时数据尚未到达,内核需要等待数据③此时用户进程也处于阻塞状态阶段二:①数据到达并拷贝到内核缓冲区,代表已就绪②将内核数据拷贝到用户缓冲区③拷贝过程中,用户进程依然阻塞等待。原创 2022-10-07 06:29:57 · 449 阅读 · 0 评论 -
Netty大战之文件操作补充
Pathdk7 引入了 Path 和 Paths 类Path 用来表示文件路径 Paths 是工具类,用来获取 Path 实例java Path source = Paths.get("1.txt"); // 相对路径 使用 user.dir 环境变量来定位 1.txtPath source = Paths.get("d:\1.txt"); // 绝对路径 代表了 d:\1.txtPath source = Paths.get("d:/1.txt"); // 绝对路径 同样代表了 d:\原创 2021-07-31 17:56:26 · 181 阅读 · 0 评论 -
Netty大战之手写RPC
1原创 2021-07-31 14:19:25 · 165 阅读 · 1 评论 -
Netty大战之handler 中加入线程池和Context 中添加线程池的源码剖析
源码剖析目的1) 在 Netty 中做耗时的,不可预料的操作,比如数据库,网络请求,会严重影响 Netty 对 Socket 的处理速度。2) 而解决方法就是将耗时任务添加到异步线程池中。但就添加线程池这步操作来讲, 可以有2种方式,而且这2种方式实现的区别也蛮大的。3) 处理耗时业务的第一种方式---handler 中加入线程池4) 处理耗时业务的第二种方式---Context 中添加线程池 任务队列中的 Task的3种使用场景的弊端友情提示:使用该Task任务他们使用的是同一个线原创 2021-07-31 00:06:04 · 815 阅读 · 0 评论 -
Netty大战之Netty 核心组件 EventLoop 源码剖析
源码剖析目的Echo第一行代码就是 :EventLoopGroup bossGroup = new NioEventLoopGroup(1); 下面分析其最核心的组件 EventLoopNioEventLoopGrop的拓扑图源码剖析原创 2021-07-30 19:35:33 · 167 阅读 · 0 评论 -
Netty大战之Netty 心跳(heartbeat)服务源码剖析
源码剖析目的Netty提供的心跳介绍源码剖析:IdleStateHandler四个重要属性需要注意:为什么考虑超时的问题还要考虑,出栈慢的问题,传输过程比较慢,连接状态还是存在的,但是指定的时间由于出栈慢导致消息传输出现了问题。 handlerAdded方法当handler被添加到Pipeline中时,则handlerAdded方法内部会调用的initilize方法下面的是initilize方法IdleStateHandler类的三个定时任务...原创 2021-07-30 19:35:25 · 263 阅读 · 0 评论 -
Netty大战之ChannelPipeline 调度 handler 的源码剖析
源码剖析目的1) 当一个请求进来的时候,ChannelPipeline 是如何调用内部的这些 handler 的呢? 我们一起来分析下。2) 首先,当一个请求进来的时候,会第一个调用 pipeline 的 相关方法,如果是入站 事件,这些方法由 fire 开头,表示开始管道的流动。让后面的 handler 继续处源码剖析友情提示: ChannelPipline的实际类型是DefaultChannelPipeline,通过查看上下文对象,找到pipeline就可以看到对应的类型。说明原创 2021-07-30 19:35:13 · 146 阅读 · 0 评论 -
Netty大战之Pipeline Handler HandlerContext创建源码剖析
源码剖析目的Netty 中的 ChannelPipeline 、 ChannelHandler 和 ChannelHandlerContext 是非常 核心的组件, 我们从源码来分析Netty 是如何设计这三个核心组件的,并分析是如何创建 和协调工作的Pipeline Handler HandlerContext创建过程梳理Pipeline Handler HandlerContext介绍下面的是图形化展示ChannelPipeline的作用与设计友情提示:Cha...原创 2021-07-30 12:17:05 · 148 阅读 · 0 评论 -
Netty大战之Netty 接受请求过程源码剖
源码剖析目的1) 服务器启动后肯定是要接受客户端请求并返回客户端想要的信息的,下面源码分 析 Netty 在启动之后是如何接受客户端请求的2) 在 io.netty.example 包下源码剖析Netty接受请求过程梳理源码分析过程1、在NioEventLoop类中有一个方法processSelectedKey,内部代码有一个Unsafe.read方法,进入read方法内部。2、在read方法内部有两个核心方法 doReadMessages(readBuf),fire..原创 2021-07-29 19:09:49 · 153 阅读 · 0 评论 -
Netty大战之Netty 启动过程源码剖析
Netty启动过程梳理原创 2021-07-29 19:09:16 · 156 阅读 · 0 评论 -
Netty大战之TCP 粘包和拆包 及解决方案
TCP 粘包和拆包基本介绍原因:就是因为这个Nagle算法导致的,将多个小数据包,变成一个大的数据包导致的问题粘包和拆包图解第一次运行的结果第二次运行的结果...原创 2021-07-28 11:52:48 · 280 阅读 · 0 评论 -
Netty大战之Netty编解码器和handler的调用机制
基本说明友情提示:这个ChannelHandler就是我们自己写的handler自定义的,用来处理业务逻辑,我们写的都是extends SimpleChannelInboundHandler,他是ChannelInboundHandler的子类,专门处理入栈的,同理也有写出栈的友情提示:处理业务,要出栈都是出栈的handler,要是入栈都是入栈。编码解码器友情提示:为什么后面介绍的粘包问题可以用编码器+协议解决,编码器可以根据协议进行数据的处理,拆分一个完整的包数据。比如:定义一..原创 2021-07-25 19:57:21 · 638 阅读 · 0 评论 -
Netty大战之Protobuf结构化数据存储格式
编码和解码的基本介绍友情提示:服务端对接收的数据进行解码,客户端对传递到服务器端的数据进行编码。Netty 本身的编码解码的机制和问题分析友情提示:核心问题,就是不能解决数据的跨语言的问题,所以引入下面的Protobuf,除此之外,相比之前的客户端和服务端都需要编码和解码器。而使用他,只需要服务端解码,客户端编码Protobuf(结构化数据存储格式)友情提示:目前公司由http+json转型成tcp+protobuf称为一种趋势,个人看来,这个Protobuf,实际就是让数据传.原创 2021-07-25 14:39:36 · 226 阅读 · 0 评论 -
Netty大战之Netty下的WebSocket
服务端代码:package com.atguigu.netty.websocket;import com.atguigu.netty.heartbeat.MyServerHandler;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.Channel原创 2021-07-25 14:38:15 · 865 阅读 · 1 评论 -
Netty大战之心跳检测机制
何为心跳顾名思义, 所谓 心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性.为什么需要心跳因为网络的不可靠性, 有可能在 TCP 保持长连接的过程中, 由于某些突发情况, 例如网线被拔出, 突然掉电等, 会造成服务器和客户端的连接中断. 在这些突发情况下, 如果恰好服务器和客户端之间没有交互的话, 那么它们是不能在短时间内发现对方已经掉线的. 为了解决这个问题, 我们就需要引入 心跳 机制.心跳的使用场景原创 2021-07-24 17:13:54 · 292 阅读 · 1 评论 -
Netty大战之Netty模型及核心组件
工作原理示意图1-简单版Netty 主要基于主从 Reactors 多线程模型(如图)做了一定的改进,其中主从 Reactor 多 线程模型有多个 Reactor说明工作原理示意图2-进阶版1、Boos Groop和Worker Group内部都包含NioEventLoop。2、...原创 2021-07-24 10:05:28 · 530 阅读 · 1 评论 -
Netty大战之Reactor 模型
原生NIO存在的问题1) NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握 Selector、ServerSocketChannel、 SocketChannel、ByteBuffer 等。2) 需要具备其他的额外技能:要熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,你必须对多线程和网络编程非常熟悉,才能编写出高质量的 NIO 程序。3) 开发工作量和难度都非常大:例如客户端面临断连重连、网络闪断、半包读写、失 败缓存、网络拥塞和异常流的处理等等。4) J原创 2021-07-18 20:16:29 · 163 阅读 · 1 评论 -
Netty大战之零拷贝
NIO与零拷贝友情提示:所谓的零拷贝,从操作系统的角度看的,就是没有CPU拷贝,而不是没有拷贝所谓的零拷贝(Zero-Copy)是指将数据直接从磁盘文件复制到网卡设备中,而不需要经由应用程序之手 。零拷贝大大提高了应用程序的性能,减少了内核和用户模式之间的上下文切换 。 对 Linux操作系统而言,零拷贝技术依赖于底层的 sendfile() 方法实现 。 对应于 Java 语言,FileChannal.transferTo() 方法的底层实现就是 sendfile() 方法。零拷贝的实现零原创 2021-07-18 16:08:08 · 764 阅读 · 2 评论 -
Netty大战之NIO
Netty的介绍1、Netty 是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可 靠性的网络 IO 程序。2、Netty主要针对在TCP协议下,面向Clients端的高并发应用,或者Peer-to-Peer场景下 的大量数据持续传输的应用。3、Netty本质是一个NIO框架,适用于服务器通讯相关的多种应用场景理解: 1、异步:类似于ajax一样 2、基于事件驱动:Netty通过事件触发,进行网络的传输。I...原创 2021-07-18 12:05:30 · 413 阅读 · 0 评论