Netty
文章
01 Netty简介
概述是什么Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。 Netty和Tomcat最大的区别就在于通信协议,Tomcat是基于Http协议的Servlet容器,他的实质是一个基于http协议的web容器,但是Netty不一样,他能通过编程自定义各种协议,因为netty能够通过codec自己来编码/解码字节流,完成类似redis访问的功能,这就是netty和tomcat最大的不同。 对比Netty vs NIO,工作量大,bug 多 需要自己构建协议 解决 TCP 传输问题,如粘包、半包 epoll 空轮询导致 CPU 100% 对 API 进行增强,使之更易用,如 FastThreadLocal => ThreadLocal,ByteBuf => ByteBufferNetty更友好更强大:1、JDK中NIO的一些API功能薄弱且复杂,Netty隔离了JDK中NIO的实现变化及实现细节譬如:ByteBuffer -> ByteBuf主要负...
02 核心组件
参考文献https://www.jianshu.com/p/b9f3f6a16911https://blog.csdn.net/weixin_53142722/article/details/124942857https://blog.csdn.net/qq_39339965/article/details/122344873https://www.cnblogs.com/lbhym/p/12753314.htmlhttps://zhuanlan.zhihu.com/p/514448867 为什么这样排版因为这是bootstrap创建的步骤EventLoop/EventLoopGroupChannelChannelFuture sync/addlistenerHandlerPipeline/PipelineGroup 0 HelloWorld引入依赖12345<dependency> <groupId>io.netty</groupId> <artifactId>netty-all&...
03 网络通信
服务器1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950package com.example.netty.io; import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.ChannelOption;import io.netty.channel.EventLoopGroup;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.SocketChannel;import io.netty.channel.socket.nio.NioServerSocketChannel; /** * netty 服务端 * * @au...
04 Reactor与Netty
Reactor与NettyReactor概念Reactor模型中定义了三种角色: Reactor:负责监听和分配事件,将I/O事件分派给对应的Handler。新的时间包含连接建立就绪、读就绪、写就绪等。 Acceptor:处理客户端新连接,并分派请求到处理器链中。 Handler:将自身与事件绑定,执行费阻塞读/写人物,完成channel的读入,完成处理业务逻辑后,负责将结果写出channel。 单Reactor - 单线程模型NIO下Reactor单线程,所有的接受连接,处理数据的相关操作都在一个线程中完成,性能上有瓶颈。 单Reactor - 多线程模型把比较消耗时的数据的编解码运算操作放入线程池中执行,虽然提升了性能但是还不是最好的方式。 主从Reactor - 多线程主从多线程,对于服务器来说,接收客户端的连接是比较重要的,因此将这部分操作单独用线程去操作。 这种模式的基本工作流程为: Reactor主线程MainReactor对象通过select监听客户端连接事件,收到事件后,通过Acceptor处理客户端连接事件。 当Acceptor处...








