netty是一个高性能、异步事件驱动的nio框架,它提供了对tcp、udp和文件传输的支持,netty的所有io操作都是异步非阻塞的,通过future-listener机制,用户可以方便的主动获取或者通过通知机制获得io操作结果。
尽管jdk提供了丰富的nio类库,网上也有很多nio学习例程,但是直接使用java nio类库想要开发出稳定可靠的通信框架却并非易事,原因如下:
1)nio的类库和api繁杂,使用麻烦,你需要熟练掌握 selector、server socket channel
socketchannel、bytebuffer等。
2) 需要具备其他的额外技能做铺垫,例如熟悉java多线程编程。这是因为nio编程涉及到 reactor模式,你必须对多线程和网路编程非常熟悉,才能编写出高质量的nio程序。
3)可靠性能力补齐,工作量和难度都非常大。例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常码流的处理等问题,nio编程的特点是功能开发相对容易,但是可靠性能力补齐的工作量和难度都非常大。
4) jdk nio的bug,例如臭名昭著的epoll bug,它会导致selector空轮询,最终导致cpu100% 。官方声称在jdk16版本的 updatei8修复了该问题,但是直到jdk1.7版本该问题仍旧存在,只不过该bug发生概率降低了一些而已,它并没有被根本解决。该bug以及与该bug相关的问题单可以参见以下链接内容:
http://bugsjava.com/bugdatabase/viewbug.do?bugid=6403933
http:/bugs.javacom/bugdatabase/viewbugdo?bugid=2147719
随着开源no框架的发展,目前越来越多的商用系统采取直接集成开源no框架的方式代替之前的自研方案。以最成熟的nio框架netty为例,它已经得到成百上千的商用项目验证。例如 hadoop的rpc框架avro使用netty作为底层通信框架、实时流式计算框架sum底层通信框架也采用的是netty,还有 twitter内部使用的rpc框架 finagle,其底层通信框架也基于netty构建。
netty的优势总结如下:◎api使用简单,开发门槛低。
◎功能强大,预置了多种编解码功能,支持多种主流协议。
◎定制能力强,可以通过 channelhandler对通信框架进行灵活地扩展。
◎性能高,通过与其他业界主流的no框架对比,netty的综合性能最优。
◎成熟、稳定,nety修复了已经发现的所有 jdk nio bug,业务开发人员不需要再为n1o的bug而烦恼。
◎社区活跃,版本迭代周期短,发现的bug可以被及时修复。同时,更多的新功能会加入。
◎经历了大规模的商业应用考验,质量得到验证。在互联网、大数据、网络游戏、企业应用、电信软件等众多行业得到成功商用,证明了它已经完全能够满足不同行业的商业应用了。
netty的表现如此优秀,因此我们的通信框架基于netty进行设计和开发。
本文参考李林锋《分布式服务框架原理与实践》,上海尚学堂java培训整理,阅读更多java技术文章请返回本栏目,获取java技术资料或学习视频,请联系客服小姐姐。
以下文章值得一读:《分布式服务架构原理和功能特性_上海java培训》、《什么是微服务架构?微服务架构与soa架构区别》、《rpc架构与原理,以及业界主流的rpc框架简介》、《经典的垂直应用框架-mvc框架介绍》
相关推荐:
基于nio的netty网络框架(图文详解)
netty 线程模型的实例详解
以上就是最成熟的开源nio框架netty的详细内容。