写在前面
netty啊,我就非得用你,我用Java nio咋就不行?
1:我们都要做什么?
比如我们想要实现一个http的服务器,如果是直接基于Java nio来做的话,就需要来解析http协议,不小的工作量啊。
TCP协议的半包,粘包,你也需要自己解决。
TCP的异常处理,断线重连等也需要自己解决。
这都是工作量,你的KPI不要了???
不过幸好,以上的这些netty都已经帮我们完成了,并且做的还顶级棒,棒的呱呱叫!!!干嘛不直接用,傻???
好的,话说回来,你就算是,犟驴它妈给犟驴开门------犟到家了!!!你不差钱,你爸姓马。你写的代码可能没有bug吗?不可能的,你有那么多的精力来修改这些bug吗?作为对比可以看下netty目前的issue:
59023个已经解决的,没有解决的还有558个,吓人不,你确定一个人搞得定?
所以不管是哪种技术,我们直接选择一个现成的框架来使用,永远都是真理,除非你们公司有什么特殊的需求让你不得不自己造一个轮子,那当然另说啦!!!
除了以上的这些,netty还对Java nio做了更多的优化,方便我们使用:
屏蔽jdk不同版本api的变化(底层nio-》nio2(aio))变化意味着重构
屏蔽细节,使编程更加简单高效如Java nio需要关注注册事件,处理SelectionKey,处理完remove等
优化部分类如bytebuffer,切换读写模式还需要flip,netty就不需要啦
最后的最后,就好像你生了一个孩子,生了就完事了吗?NONONO,生麻烦,养更TMD麻烦!!!对应到程序就是维护的成本,netty 04年发布,截止到俺写这篇文章:
已经维护了20年
,看下人家代码是一直在更新的:
所以,还就真得用netty,而不要直接使用Java nio。