随笔分类 - Netty
摘要:通常HTTP协议通信过程中,客户端和 服务器端的交互过程如下: 客户端(如 Postman工具、浏览器、 Java程序等)向 Server服务端发送 HTTP请求; Server服务端对 HTTP请求进行解析; Server服务端向Client客户端发送 HTTP响应报文; Client客户端解析H
阅读全文
摘要:什么是编解码器 每个网络应用程序都必须定义如何解析在两个节点之间来回传输的原始字节,以及如何将其和目标应用程序的数据格式做相互转换;这种转换逻辑有编解码器处理,编解码器有编码器和解码器组成,它们每种都可以将字节流从一种格式转换为另一种格式; 编码器是将消息转换为适合传输的格式,而对应的解码器则是将网
阅读全文
摘要:什么是粘包? 在网络传输层有TCP和UDP两种协议; 如果使用TCP进行通信,则在大多数场景下是不存在丢包和包乱序问题的,因为TCP通信是可靠的通信方式,TCP栈通过序列号和包重传确认机制保证数据包的有序和一定被正确发送到目的地; 如果使用UDP进行通信,且不允许少量丢包,就要自己在UDP的基础上实
阅读全文
摘要:ByteBuf缓冲区 Netty版本:netty-all-4.1.30.Final Netty提供了ByteBuf缓冲区组件来替代Java NIO的ByteBuffer缓冲区组件(即Netty的数据读写是以ByteBuf为单位进行交互的),以便更加快捷和高效的操作内存缓冲区; ByteBuf的优势
阅读全文
摘要:Channel Channel翻译成通道,Channel的角色和OIO中的Stream(流)是类似的,在OIO(OIO的操作是阻塞的,而NIO的操作是非阻塞的)中,同一个网络连接会关联到两个流:一个是输入流(Input Stream),另一个是输出流(Output Stream),Java应用程序通
阅读全文
摘要:Buffer类 当应用程序进行数据传输的时候,往往需要使用缓冲区,常用的缓存区就是JDK NIO类库提供的 java.nio.Buffer; NIO的Buffer本质上是一个内存块,既可以写入数据,也可以从中读取数据; 其中,Java NIO中代表缓冲区的Buffer类是一个抽象类,对应于Java的
阅读全文
摘要:Bootstrap引导类 一个 Netty 应用通常由一个 Bootstrap 开始,主要作用是配置整个 Netty 程序,串联各个组件,而客户端和服务端这两种应用程序间通用的引导步骤有AbstractBootstrap处理; 引导类的层次结构 Netty 中 Bootstrap 类是客户端程序的启
阅读全文
摘要:ChannelPipeline 注:以下Netty版本为4.1.30.Final; ChannelPipeline概念 一条Netty Channel通道需要很多的Handler业务处理器来处理业务,每条Channel通道内部都是由一条流水线Pipeline将Handler装配起来; Netty的业
阅读全文
摘要:ChannelHandler ChannelHandler概念 在Reactor反应器模型中,反应器查询到I/O事件后,分发到Handler业务处理器,由Handler完成I/O操作和业务处理; ChannelHandler是一个接口,负责对I/O事件或者I/O操作进行拦截和处理,它可以选择性地拦截
阅读全文
摘要:什么是Channel? Channel是Netty的核心概念之一,它代表客户端和服务端建立的一个连接通道,Netty抽象出来的网络I/O读写相关的接口,即可以用于写入数据到对端,也可以从对端读取数据;客户端有一个Channel(SocketChannel),服务端也有一个Channel(NioSoc
阅读全文
摘要:NioEventLoop添加自定义任务处理,可分为普通任务和定时任务; NioEventLoop继承关系图 NioEventLoop顶层的接口 NioEventLoop顶层的接口为JUC包下的java.util.concurrent.Executor; Executor是一个接口,其定义了一个接收R
阅读全文
摘要:I/O读写的基础原理 用户态进程与内核态进程 为了避免用户进程直接操作内核,保证内核安全,操作系统将虚拟内存划分为两部分,一部分是内核空间(Kernel Space),另一部分是用户空间(User Space);在Linux 系统中,内核模块运行在内核空间,对应的进程处于内核态;而用户程序运行在用户
阅读全文