一、什么是Netty
Netty 是一种可以轻松快速的开发协议服务器和客户端 网络应用程序的 NIO 框架,它大大简化了 TCP 或者 UDP 服务器的网络编程,但是你仍然可以访问和使用底层的 API,Netty 只是对其进行了高层的抽象。
Netty 的简易和快速开发并不意味着由它开发的程序将失去可维护性或者存 在性能问题。Netty 是被精心设计的,它的设计参考了许多 协议的实现,比如 FTP,SMTP,HTTP 和各种二进制和基 于文本的传统协议,因此 Netty 成功的实现了兼顾快速开 发,性能,稳定性,灵活性为一体,不需要为了考虑一方 面原因而妥协其他方面。
可以总结概括为五点:
(1)异步事件驱动框架,用于快速开发高性能服务端和客户端
(2)封装了JDK底层BIO和NIO模型,提供高度可用的API
(3)自带编码解码器解决拆包粘包问题,用户只用关心业务逻辑
(4)精心设计的Reactor线程模型支持高并发海量连接
(5)自带协议栈,无需用户关心
二、基础概念
Channel 也就是通道,这个概念是在 JDK NIO 类库里面提供的一个概念,JDK 中其实现类有客户端套接字通道 java.nio.channels.SocketChannel 和服务端监听套接字 通道 java.nio.channels.ServerSocketChannel,Channel 的出现是为了支持异步 IO 操作,JDK 里面的通道是 java.nio.channels.Channel。io.netty.channel.Channel 是 Netty 框架自己定义的一个通道接口,Netty 实现的客户端 NIO 套接字通道是 NioSocketChannel,提供的服务器端NIO 套接字通道是 NioServerSocketChannel。
NioSocketChannel
服务器端监听套接字通道,内部管理了一个 Java NIO 中的 java.nio.channels.ServerSocketChannel 实例,用来创建ServerSocketChannel 实例和设置该实例属性,并调用该实例的 bind 方法在指定端口监听客户端的链接。
Channel 与 socket 的关系