对于netty,小菜鸡啲灵魂N问

1. 啥是netty?

Netty 由韩国奥巴 Trustin Lee (Line公司)研发的。

官网对Netty的描述:Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.

翻译过来:Netty 是一个异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服务器和客户端。

我稍微总结一下:

  • 本质:网络应用程序框架
  • 实现:异步、基于事件驱动
  • 特点:高性能、可维护、快速开发
  • 用途:开发服务器和客户端

2. 为啥不用JDK NIO?重复造轮子?

1. Netty 比 JDK NIO 支持更丰富

  • 支持应用层协议:http、http2、mqtt、websocket;
  • 网络传输处理的问题:粘包、半包;
  • idle 处理:read idle、write idle、all idle;
  • ssl 支持;
  • ip filter,可基于 CIDR 实现黑白名单;
  • 高低水位线;
  • 流量整形;

2. Netty 更好地规避 JDK NIO bug

2.1. epoll bug :异常唤醒空转导致 CPU 100%

异常唤醒空轮训的问题, JDK NIO 已经放弃治疗了。

io.netty.channel.nio.NioEventLoop#select:

 

对于此问题,netty的解决方式,当空轮训到达阀值(默认3,可以通过参数 -Dio.netty.selectorAutoRebuildThreshold设置)时,选择rebuild selector,重新 select 。

2.2. IP_TOS参数设置时,抛出异常

IP_TOS 参数,设置于IP头部的Type-of-Service字段,用于描述IP

io.netty.channel.socket.nio.NioChannelOption#setOption

 

遇到IP_TOS参数设置时,netty直接返回设置失败,避免了问题出现。

2. Netty 的 API 更友好强大

  • Netty 对 NIO buff 的操作更强大:ByteBuffer -> ByteBuf
  • Netty 对线程本地的增强:ThreadLocal -> FastThreadLocal
  • Netty 对 Future 的支持增强:Future —> Promise

3. Netty 相比 JDK NIO 更为稳定

Netty 维护多年,解决了多少 nio 问题,踏平了多少坑坑洼洼,如果你选择使用 JDK NIO 搭建属于自己的网络通信框架,相当于你在王者峡谷1V5没什么区别,其他队友都挂机了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值