随笔分类 - 多线程高并发 / Netty
摘要:AbstractBootstrap public abstract class AbstractBootstrap<B extends AbstractBootstrap<B,C>,C extends Channel> extends Object implements Cloneable 1、辅助
阅读全文
摘要:启动流程 // Netty 使用 NioEventLoopGroup(NIO Boss 线程)来封装线程和 Selector Selector selector = Selector.open(); // 创建 NioServerSocketChannel,同时会初始化它关联的 handler,以及
阅读全文
摘要:连接假死 1、原因 (1)网络设备出现故障,例如:网卡,机房等,导致底层 TCP 连接已经断开,但应用程序没有感知,仍然占用资源 (2)公网网络不稳定,出现丢包,如果连续出现丢包,客户端无法发送数据,服务端无法接收数据,消耗资源 (3)应用程序线程阻塞,无法进行数据读写 2、问题 (1)假死连接占用
阅读全文
摘要:HttpServerCodec public final class HttpServerCodec extends CombinedChannelDuplexHandler<HttpRequestDecoder,HttpResponseEncoder> implements HttpServerU
阅读全文
摘要:粘包原因 1、应用层:接收方 ByteBuf 设置太大(Netty 默认 1024) 2、传输层:滑动窗口中缓冲多个报文 3、Nagle 算法 半包原因 1、应用层:接收方 ByteBuf 小于实际发送数据量 2、传输层 (1)接收方窗口中无法容纳发送方的全部报文,接收最后剩余部分,接收窗口仍有容量
阅读全文
摘要:创建 1、ByteBufAllocator (1)实现类负责分配缓冲区,这个接口的实现应该是线程安全的 (2)默认实现 ByteBufAllocator DEFAULT = ByteBufUtil.DEFAULT_ALLOCATOR; static final ByteBufAllocator DE
阅读全文
摘要:ChannelHandler public interface ChannelHandler 1、处理一个 I/O 事件或拦截一个 I/O 操作,并将其转发给其 ChannelPipeline 中的下一个 handler 2、ChannelHandler 本身并没有提供很多方法,但通常要实现它的一个
阅读全文
摘要:继承关系 1、Netty 中的 Future 与 JDK 中的 Future 同名,但是为两个接口 java.util.concurrent.Future<V> io.netty.util.concurrent.Future<V> 2、Netty 的 Future 继承自 JDK 的 Future,
阅读全文
摘要:Channel 接口 1、Javadoc 描述 (1)一个网络 Socket 的节点或一个能够进行 I/O 操作的组件,如:读、写、连接、绑定 (2)一个通道提供用户以下选项 (3)通道的当前状态,例如:是否打开?是否连接? (4)通道的配置参数,例如:接收缓冲区的大小 (5)通道支持的 I/O 操
阅读全文
摘要:EventLoop 1、事件循环对象 public interface EventLoop extends OrderedEventExecutor, EventLoopGroup { @Override EventLoopGroup parent(); } 2、本质:一个单线程执行器 (1)同时维
阅读全文
摘要:Netty 1、一个异步、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端 2、异步:并非异步 IO,而是异步调用,多线程解耦调用、处理,本质为多路复用 3、优点 (1)基于 Java NIO,修复 Bug (2)不需要构建协议 (3)解决 TCP 传输问题,如:粘包、半包
阅读全文