2024年3月6日
该文所涉及的 netty 源码版本为 4.1.6。 Netty 中的 ByteBuf 为什么会发生内存泄漏 在 Netty 中,ByetBuf 并不是只采用可达性分析来对 ByteBuf 底层的 byte[] 数组来进行垃圾回收,而同时采用引用计数法来进行回收,来保证堆外内存的准确时机的释放。 在每个 ByteBuf 中都维护着一个 refCnt 用来对 ByteBuf 的被引用数进行记录,当 ByteBuf 的 retain() 方法被调用时,……
阅读全文
2024年3月6日
基于自定义协议的Netty开发 在某些情况下,我们需要基于TCP/IP协议栈开发自己的应用层协议,以满足特定的业务需求。在这篇博客中,我们将使用Netty开发一个基于自定义协议的客户端和服务器。 1. 环境准备 首先,我们需要在项目中引入Netty的依赖。在Maven项目中,添加以下依赖:……
阅读全文
2024年3月6日
基于WebSocket协议的Netty开发 WebSocket是一种在单个TCP连接上进行全双工通信的协议。在这篇博客中,我们将使用Netty开发一个基于WebSocket协议的实时聊天系统。 1. 环境准备 首先,我们需要在项目中引入Netty的依赖。在Maven项目中,添加以下依赖: 1……
阅读全文
2024年3月6日
基于HTTP协议的Netty开发 Netty是一个高性能、易于使用的NIO客户端服务器框架,用于快速开发可维护的高性能协议服务器和客户端程序。在这篇博客中,我们将使用Netty开发一个基本的HTTP服务器。 1. 环境准备 首先,我们需要在项目中引入Netty的依赖。在Maven项目中,添……
阅读全文
2024年3月6日
Netty 中的 Future 和 Promise 组件是用于处理异步操作结果的两个接口。Future 表示一个异步操作的结果,它可以用于检查操作是否完成、获取操作结果、取消操作等。Promise 是 Future 的子接口,它可以用于设置操作结果、通知操作完成等。以下是 Netty 中 Future 和 Promise 组件的部分代码,并添加了中文注释: 1 2 3 4 5 6 7 8 9 10 11……
阅读全文
2024年3月6日
Netty 的线程模型 Netty 线程模型 的设计,也是基于 Reactor 模型,尽管不同的 NIO 框架 对于 Reactor 模式 的实现存在差异,但本质上还是遵循了 Reactor 的基础线程模型。 Reactor 单线程模型 Reactor 单线程模型,是指所有的 I/O 操作 都在同一个 NIO 线程 上完成。NIO 线程 的职责如下。 作为 NIO 服务端,接收客户端的 TCP 连接; 作为 NIO 客户端,向服务端发起 TCP 连接;……
阅读全文
2024年3月6日
类似于 java.nio 包 的 Channel,Netty 提供了自己的 Channel 和其子类实现,用于异步 I/O 操作 等。Unsafe 是 Channel 的内部接口,聚合在 Channel 中协助进行网络读写相关的操作,因为它的设计初衷就是 Channel 的内部辅助类,不应该被 Netty 框架 的上层使用者调用,所以被命名为 Unsafe。 Channel 组件 Netty 的 Channel 组件 是 Netty 对网络操作的封装……
阅读全文
2024年3月6日
Netty 的 ChannelPipeline 和 ChannelHandler 机制类似于 Servlet 和 Filter 过滤器,这类拦截器实际上是职责链模式的一种变形,主要是为了方便事件的拦截和用户业务逻辑的定制。 Servlet Filter 能够以声明的方式(web.xml 配置文件)插入到 HTTP 请求响应的处理过程中,用于拦截请求和响应,以便能够查看、提取或以某种方式操作正在客户端和服务器之间交换的数……
阅读全文
2024年3月6日
Netty 中的 ByteBuf 组件是一个高性能的字节缓冲区,它可以用于网络通信、文件 IO 等场景。ByteBuf 的实现基于 Netty 的内存管理机制,可以有效地减少内存拷贝和内存分配的开销。以下是 Netty 中 ByteBuf 组件的部分代码,并添加了中文注释: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40……
阅读全文
2024年3月6日
Netty 是一个高性能、异步事件驱动的网络应用程序框架,它使用了 NIO 技术来提供高性能的网络通信。在 NIO 中,有三种常用的多路复用器(Multiplexor):Selector、Poll 和 Epoll。这些多路复用器可以同时监听多个网络连接的 IO 事件,从而提高网络通信的效率。 Selector Selector 是 Java NIO 中的一种多路复……
阅读全文