netty
文章平均质量分 91
netty核心源码深度分析
star++
致力于研究Apache开源项目
展开
-
netty处理器链架构图及其总结
处理器作用1.处理器作用是用来处理IO事件的2.处理IO事件会遇到不同的问题,所以设计为了责任链的模式,有点分层的概念,多个处理器同时工作用于解决不同问题问题,粘包半包用一个处理器,然后将完整包给到下一个处理器,新的处理器用来解决反序列化处理业务的3.责任链只是个单向链表的结构,由于用读写事件,顺序相反的操作,所以处理器链其实是双向的,底层设计为一个双向链表4.图一是读事件的处理器流向详情,图二是读写事件的一个简图总览读事件处理器链架构图处理器链总架构图总结1.处理器链用于处理IO事件,原创 2020-09-26 01:11:17 · 429 阅读 · 0 评论 -
netty粘包半包问题常见解决方案及总结
解决粘包半包主要目的解决粘包半包问题其实就是围绕一个主题,那就是从TCP包中,通过一定字节作为标记,然后标记前字节必定是一个可反序列化的字节Buff, 这样就可以解决粘包半包问题解决粘包方案1.通过指定固定字节数作为分隔标准2.指定特殊字符作为分隔标准3.默认使用换行符作为分隔标准(指定特殊字符作为分隔标准一种情况)解决粘包方案图解FixedLengthFrameDecoder//截取固定长度的字节作为一个包//子类解码实现,由ByteToMessageDecoder主流程的chan原创 2020-09-26 00:15:00 · 441 阅读 · 0 评论 -
LineBasedFrameDecoder解决粘包半包源码分析
粘包半包问题1.TCP层传递的字节数据包是没有任何含义的,不清楚哪写字节需要组装在一起是有意义的2.在我们程序中,一般是需要将一部分字节数组当作一个完整包进行反序列化的,如果多一个字节或者少一个字节都会反序列失败3.我们可以做一个标记,比如以一个换行符作为一个反序列单元,那么就可以正常取出我们需要的数据包,LineBasedFrameDecoder这个处理器就是这个原理,使用方式很简单,只要在发送一个反序列化的字节数组后,后面加上换行符即可LineBasedFrameDecoder解决粘包原理原创 2020-09-23 22:51:49 · 308 阅读 · 0 评论 -
netty处理器链读数据执行流程源码分析
参考资料netty处理器链初始化源码分析触发读事件//NioEventLoop的run方法//这个是事件轮训线程的轮训方法,会轮训处理相应的事件,比如读事件protected void run() { for (;;) { try { //获取到Selector上的io事件 processSelectedKeys(); } finally {原创 2020-09-21 22:23:29 · 246 阅读 · 0 评论 -
netty处理器链初始化源码分析
先看处理器链初始化整体流程图配置处理器//使用配置构建器,配置需要绑定的处理器serverBootstrap.group(bossEventLoopGroup, workEventExecutors) .channel(NioServerSocketChannel.class) .localAddress(port) .childHandler(new ChannelInitializer<SocketChannel>() {原创 2020-09-19 16:13:09 · 650 阅读 · 0 评论 -
netty处理客户端新连接源码分析
参考资料Reactor(主从)原理详解与实现NioEventLoopGroup源码分析netty服务端启动流程源码分析netty服务端启动流程总结先看看图NioEventLoop的run方法//NioEventLoop的run方法主要是用来处理绑定的Channel的所有任务的//1.轮训处理注册的Channel的IO事件//2.轮训处理注册的Channel的所有异步任务,也就是任务队列里的操作//3.NioEventLoop作为Boss EventLoop处理连接事件//3.NioE原创 2020-09-16 12:40:17 · 248 阅读 · 2 评论 -
netty服务端启动流程总结
参考资料NioEventLoopGroup源码分析netty服务端启动流程源码分析服务端启动做了哪些事情//创建EventLoopGroup,初始化所有的EventLoop,初始化线程工具 EventLoopGroup bossEventLoopGroup = new NioEventLoopGroup(2); executor = new ThreadPerTaskExecutor(newDefaultThreadFactory());//创建channel,初始化channel的pipel原创 2020-09-12 13:17:51 · 241 阅读 · 0 评论 -
netty服务端启动流程源码分析
参考资料NioEventLoopGroup源码分析##示例//创建两个EventLoopGroup,一个用于连接处理,一个用于IO读写事件处理EventLoopGroup bossEventLoopGroup = new NioEventLoopGroup(2);EventLoopGroup workEventExecutors = new NioEventLoopGroup(2);//创建启动类对象ServerBootstrap serverBootstrap=new ServerBoot原创 2020-09-09 22:33:20 · 301 阅读 · 0 评论 -
NioEventLoopGroup源码分析
目录资料参考Reactor单线程模型详解与实现Reactor(主从)原理详解与实现异步回调原理详解与实现NioEventLoopGroup构造函数EventLoopGroup bossEventLoopGroup = new NioEventLoopGroup();//NioEventLoopGroup类//无参构造public NioEventLoopGroup() { //调用有一个参数的构造 this(0);}//直接看一个参数比较全的构造,会一层层调用到这里publ原创 2020-09-06 00:42:07 · 352 阅读 · 0 评论 -
Reactor(主从)原理详解与实现
目录主从Reactor原理1.单Reactor缺点1.单Reactor需要响应连接和读写事件,单线程处理任务较多2.单Reactor连接和读写事件放在一块处理,会互相影响,而且本身读写事件是一个比较 耗时的操作,当一个读写事件处理事件太长,那么势必会影响下一个连接事件的处理,影响 用户连接,这是个非常不友好的事情,很影响体验2.主从Reactor原理1.主从Reactor将会使用两个Reactor,主Reactor响应连接事件,从Reactor响应读写事件2.主Reactor的sel原创 2020-08-28 00:04:29 · 2845 阅读 · 0 评论 -
异步回调原理详解与实现
目录FutureTask案例分析1.FutureTask代码演示public class FutureTaskTest { public static void main(String[] args) throws ExecutionException, InterruptedException { Task task = new Task(); //测试FutureTask的阻塞获取结果 FutureTask<Integer>原创 2020-08-27 10:59:27 · 1700 阅读 · 0 评论 -
Reactor单线程模型详解与实现
Reactor单线程模型详解目录Reactor模式原理Reactor实现总结目录Reactor模式原理1.原理说明1.Reactor模型是相对传统IO机构来说的,也就是NIO模型, NIO模型之所以可以优化,得益于它是基于事件,基于异步,不像传统IO,是阻塞的,很难做架构上的改变2.Reactor模型分为几个组件,分别是Reactor,Acceptor,Handler3.Reactor组件负责分发事件,如果是连接,那么交给Acceptor,如果是读写事件,那么交给Handler4.Accep原创 2020-08-22 21:38:06 · 1424 阅读 · 0 评论