Netty 5.0架构详解与源码深度解析

5星 · 超过95%的资源 需积分: 26 20 下载量 48 浏览量 更新于2024-07-21 收藏 3.41MB PDF 举报
《Netty5.0架构剖析和源码解读》是一本深度讲解Netty 5.0的书籍,适合对Java NIO技术感兴趣的读者。作者李林锋通过该书详细介绍了Netty框架的背景、原理以及源码实现。章节内容涵盖了Java IO的发展历程,特别是BIO(同步阻塞)通信的局限性,以及NIO(非阻塞I/O)的引入以提高性能和并发处理能力。 在第1章中,作者阐述了Java IO的历史演进,指出了传统BIO通信存在的问题,如同步阻塞导致的性能瓶颈和资源浪费。随着JDK 1.4中NIO 1.0的推出,非阻塞I/O机制成为解决这些问题的关键。NIO允许服务器在一个单独的Acceptor线程上监听连接,然后将新连接分发给独立的Worker线程进行处理,从而实现高并发和低延迟。 在第2章,作者深入浅出地讲解了NIO的基本概念,包括NIO服务端和客户端的实现。服务端主要涉及`ServerBootstrap`类的使用,以及如何通过`NioServerSocketChannel`进行注册和接收新连接。客户端则通过`Bootstrap`类辅助连接,并展示了服务器ACK应答和连接成功的流程。 第3章是Netty源码的深度解析,包括服务器端和客户端的创建过程,如`NioServerSocketChannel`的初始化,客户端的连接逻辑,以及读写操作的异步实现。作者重点介绍了如何通过`Selector`和`EventLoopGroup`来管理多个IO事件,确保高效处理。 在第4章,作者剖析了Netty的架构设计,强调了逻辑架构的重要性,即如何通过管道和事件驱动的方式组织代码,使得系统能够轻松扩展和维护。 最后,附录部分提供了作者的个人信息和使用声明,为读者提供了完整的学习资源和版权信息。 《Netty5.0架构剖析和源码解读》不仅介绍了Netty 5.0的基本概念和技术细节,还提供了实用的代码示例和底层原理的深度解析,对于希望深入理解Netty并应用于实际项目中的开发者来说,是一本不可多得的参考资料。
2023-06-12 上传

2023-07-14 15:19:01.215 WARN 7308 --- [sson-netty-2-15] io.netty.util.concurrent.DefaultPromise : An exception was thrown by org.redisson.misc.RedissonPromise$$Lambda$888/0x00000008008f7440.operationComplete() java.lang.NullPointerException: null 2023-07-14 15:19:01.216 ERROR 7308 --- [sson-netty-2-15] o.r.c.SentinelConnectionManager : Can't execute SENTINEL commands on /172.24.107.11:26379 org.redisson.client.RedisException: ERR No such master with that name. channel: [id: 0x2d66827d, L:/172.23.9.103:46812 - R:/172.24.107.11:26379] command: (SENTINEL SLAVES), params: [mymaster] at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:365) ~[redisson-3.13.3.jar:3.13.3] at org.redisson.client.handler.CommandDecoder.decodeCommand(CommandDecoder.java:196) ~[redisson-3.13.3.jar:3.13.3] at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:134) ~[redisson-3.13.3.jar:3.13.3] at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:104) ~[redisson-3.13.3.jar:3.13.3] at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:501) ~[netty-codec-4.1.51.Final.jar:4.1.51.Final] at io.netty.handler.codec.ReplayingDecoder.callDecode(ReplayingDecoder.java:366) ~[netty-codec-4.1.51.Final.jar:4.1.51.Final] at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) ~[netty-codec-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[netty-common-4.1.51.Final.jar:4.1.51.Final] at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.51.Final.jar:4.1.51.Final] at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.51.Final.jar:4.1.51.Final] at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na] 解决方法

2023-07-15 上传