Netty介绍(一)
早期java提供了java.net包用于网络开发,被称为OIO
即:Old-blocking I/O 阻塞IO
Echo协议是对原信息的回声(原样返回),用于检测调试网络。
可以基于TCP/UDP协议用于检测端口7
java.net包主要是Socket,ServerSocket,用于TCP;UDP的话用DatagramSocket类
通信是阻塞的,并且每个新加入的连接,需在服务器创建新的Socket实例。
从java1.4开始,提供NIO。New I/O。也叫Non-blocking I/O
它有几个核心概念:Channel, Buffer, Selecter
前面同步、阻塞IO的方式,在面对高并发的场景,要消耗大量的线程来维持连接。
CPU在大量的线程之间频繁切换,损耗很大。
一旦单机的连接超过1W,性能急剧下降。所有高并发的量化,是1W以上。
从java1.7开始,提供了AIO,异步IO,也叫NIO2
采用“订阅-通知”模式,linux使用epoll
都在java.nio包下,无需再使用Selector,代码简化不少
那还有什么问题呢,多了
- NIO和AIO都比标准IO复杂
- 并发要引入线程池,增加了复杂性
- 没有断连、闪断等异常处理
- AIO在windows下使用IOCP,在linux下用epoll,性能不理想,没有对UDP的支持
所以,一般用三方框架netty
Netty的异步事件驱动框架,所有IO都是异步的,IO调用会立即返回
返回的是ChannelFuture,通过ChannelFuture通知调用成功、失败、或取消了
调用者通过返回的ChannelFuture来获取操作执行的状态,再通过注册监听函数来执行完成后的操作
Netty提供了叫Channel的统一的异步IO编程接口。
优势是可以随意切换传输实现,比如TCP切UDP。
Netty使用自己的缓存API ByteBuf,而不是Java NIO的ByteBuffer
- 点赞
- 收藏
- 关注作者
评论(0)