Netty介绍(一)

举报
黄生 发表于 2022/10/23 23:04:19 2022/10/23
【摘要】 早期java提供了java.net包用于网络开发,被称为OIO即:Old-blocking I/O 阻塞IOEcho协议是对原信息的回声(原样返回),用于检测调试网络。可以基于TCP/UDP协议用于检测端口7java.net包主要是Socket,ServerSocket,用于TCP;UDP的话用DatagramSocket类通信是阻塞的,并且每个新加入的连接,需在服务器创建新的Socket实...

早期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,代码简化不少

那还有什么问题呢,多了

  1. NIO和AIO都比标准IO复杂
  2. 并发要引入线程池,增加了复杂性
  3. 没有断连、闪断等异常处理
  4. AIO在windows下使用IOCP,在linux下用epoll,性能不理想,没有对UDP的支持

所以,一般用三方框架netty

Netty的异步事件驱动框架,所有IO都是异步的,IO调用会立即返回
返回的是ChannelFuture,通过ChannelFuture通知调用成功、失败、或取消了
调用者通过返回的ChannelFuture来获取操作执行的状态,再通过注册监听函数来执行完成后的操作

Netty提供了叫Channel的统一的异步IO编程接口。
优势是可以随意切换传输实现,比如TCP切UDP。

Netty使用自己的缓存API ByteBuf,而不是Java NIO的ByteBuffer

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。