做食物网站,电子商务网站域名注册方法,小程序软件定制开发,保险网站哪家好Netty 是什么 1#xff09;Netty 是 JBoss 开源项目#xff0c;是异步的、基于事件驱动的网络应用框架#xff0c;它以高性能、高并发著称。所谓基于事件驱动#xff0c;说得简单点就是 Netty 会根据客户端事件#xff08;连接、读、写等#xff09;做出响应#xff0c;…Netty 是什么 1Netty 是 JBoss 开源项目是异步的、基于事件驱动的网络应用框架它以高性能、高并发著称。所谓基于事件驱动说得简单点就是 Netty 会根据客户端事件连接、读、写等做出响应关于这点随着文章的论述的展开读者自然会明白。
2Netty 主要用于开发基于 TCP 协议的网络 IO 程序TCP/IP 是网络通信的基石当然也是 Netty 的基石Netty 并没有去改变这些底层的网络基础设施而是在这之上提供更高层的网络基础设施例如高性能服务器段/客户端、P2P 程序等。
3Netty 是基于 Java NIO 构建出来的Java NIO 又是基于 Linux 提供的高性能 IO 接口/系统调用构建出来的。
Netty是一个异步事件驱动的网络应用程序框架用于快速开发可维护的高性能协议服务器和客户端。JDK原生也有一套网络应用程序APINIO但是存在一些问题使得用起来不是很方便主要如下
NIO的类库和API繁杂使用麻烦。使用时需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等需要具备其他的额外技能做铺垫。例如熟悉Java多线程编程因为NIO编程涉及到Reactor模式你必须对多线程和网络编程非常熟悉才能编写出高质量的NIO程序可靠性能力补齐开发工作量和难度都非常大。例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常码流的处理等等。NIO编程的特点是功能开发相对容易但是可靠性能力补齐工作量和难度都非常大JDK NIO的Bug。例如Epoll Bug它会导致Selector空轮询最终导致CPU 100%。官方声称在JDK 1.6版本的update 18修复了该问题但是直到JDK1.7版本该问题仍旧存在只不过该Bug发生概率降低了一些而已它并没有被根本解决
Netty对JDK自带的NIO的API进行封装解决上述问题主要特点有
设计优雅适用于各种传输类型的统一API阻塞和非阻塞Socket基于灵活且可扩展的事件模型可以清晰地分析关注点高度可定制的线程模型-单线程一个或多个线程池真正的无连接数据报套接字支持使用方便详细记录的Javadoc用户指南和示例没有其他依赖项JDK5Netty3.x或6 (Netty4.x) 就足够了高性能吞吐量更高延迟更低减少资源消耗最小化不必要的内存复制安全完整的SSL/TLS和StartTLS支持社区活跃不断更新社区活跃版本迭代周期短发现的Bug可以被及时修复同时更多的新功能会被加入
Netty常见的使用场景如下
互联网行业。在分布式系统中各个节点之间需要远程服务调用高性能的RPC框架必不可少Netty作为异步高性能的通信框架往往作为基础通信组件被这些RPC框架使用。典型的应用有阿里分布式服务框架Dubbo的RPC框架使用Dubbo协议进行节点间通信Dubbo协议默认使用Netty作为基础通信组件用于实现各进程节点之间的内部通信游戏行业。无论是手游服务端还是大型的网络游戏Java语言得到了越来越广泛的应用。Netty作为高性能的基础通信组件它本身提供了TCP/UDP和HTTP协议栈。非常方便定制和开发私有协议栈账号登录服务器地图服务器之间可以方便的通过Netty进行高性能的通信大数据领域。经典的Hadoop的高性能通信和序列化组件Avro的RPC框架默认采用Netty进行跨节点通信它的Netty Service基于Netty框架二次封装实现
Netty自以为异步事件驱动的网络高性能之处主要来自于其I/O模型和线程处理模型前者决定如何收发数据后者决定如何处理数据