Netty简介
‘Netty is an asynchronous event-driven network application framework
for rapid development of maintainable high performance protocol servers & clients.’
Netty官方定义:Netty是一个用来快速开发网络协议客户端、服务端的高性能异步、由事件驱动的网络框架。
Netty通常用来快速开发网络协议客户端、服务端的NIO网络框架,极大简化了网络编程的流程,例如tcp、udp等网络传输协议,简化流程和快速开发并不意味着代码的可维护性以及性能会因此受到影响,netty框架在设计初期借鉴了一些FTP、SMTP、HTTP等一系列常用网络协议的实现,保证代码的性能、可扩展以及可维护性。
Netty框架可以大致分为3个模块:core、transport services、protocol support
Core(核心模块)
主要包含netty框架一些核心功能的实现,包括在jdk基础上定制化实现的bytebuffer,核心通信功能模块,事件扩展模型
Transport services
提供传输协议层面的功能,tcp、http、udp datagram协议中的数据传输、连接管理等基础功能
Protocol support
协议模块提供常用协议的实现,用户也可通过netty实现自定义的传输协议,目前netty已经包含了http、google protobuf、websocket等网络协议的实现
NIO,BIO,AIO
三种不同的IO模式,JDK中都有实现,IO模块主要是通过底层操作系统对于文件、网络数据的处理,在数据处理中又可分为同步、异步、阻塞、非阻塞
同步:触发IO操作后,等待是否准备就绪,线程会阻塞至IO操作就绪为止
异步:触发IO操作后,线程不会继续阻塞,当IO操作准备就绪后通知线程处理
阻塞:IO操作处理数据时,用户线程同步等待数据就绪,阻塞至数据准备就绪
非阻塞:非阻塞状态下,当数据未准备就绪时,不会同步阻塞当前线程
NIO(异步阻塞IO)
JDK1.4引入多路复用器,采用一个独立的线程轮询监控所有连接上的操作就绪情况,连接上的每个请求会单独分配一个线程处理
BIO(同步阻塞IO)
同步阻塞模型,每个连接创建一个单独的线程负责IO操作,在连接数过多时,性能急剧下降,此种IO模式适用于连接较少场景下。
AIO(异步非阻塞IO)
异步非阻塞模型,从连接的简历到数据的读写处理,全部通过异步回调的方式