探究Netty在服务器开发中的应用,Netty Service究竟是不是服务器?

Netty算服务器吗?

在深入探讨 Undertow、Jetty、Netty 与 Tomcat 之间的区别之前,让我们首先简要了解 Tomcat,Tomcat 是一款免费开源、轻量级的应用服务器,它被誉为开发和调试 JSP 程序的首选工具,尤其在中小型系统和并发用户不多的场景下备受青睐,Tomcat 实质上是 Apache 服务器的一个扩展,但它可以独立运行,无需与 Apache 同时启动。

Netty 则是一个用于快速开发高性能、高可靠网络服务器和客户端程序的异步事件驱动框架,作为 NIO 框架的演变产物,Netty 广泛应用于众多中间件的底层通信,RocketMQ、Dubbo,理解同步、异步、阻塞与非阻塞的概念是学习 Netty 的基础。

通过理解 Netty,你可以深入掌握 Nginx、Tomcat、Jetty 等服务器的工作原理,Netty 允许你通过定制编解码协议来实现特定协议的服务器,在高并发环境下,Netty 基于 Java NIO 技术封装,提供了一种高性能的解决方案,有效减轻了多线程服务器的线程创建和调度压力,NIO 的非阻塞模式通过事件机制让单个线程能够处理多个任务,极大提升了资源利用率。

通俗地讲 Netty 能做什么?

探究Netty在服务器开发中的应用,Netty Service究竟是不是服务器?  第1张

1、Netty 在 HTTP/2 多路复用方面的基础类包括 Http2FrameCodec、Http2MultiplexHandler 和 Http2MultiplexCodec,Http2FrameCodec 负责将底层的 HTTP/2 frames 消息映射为 Netty 中的 Http2Frame 对象,从而使得我们可以通过 Http2MultiplexHandler 对新创建的 stream 开启不同的 channel。

2、正如爱因斯坦所说:“所有的伟大,都产生于简单的细节中。”Netty 为我们提供了强大的 eventloop 和 channel,通过对这些基础组件的有效利用,我们可以构建出非常强大的应用程序,以代理为例,代理和反向代理是程序员耳熟能详的概念,而 Netty 正是构建这类应用的理想选择,类似于 Nginx 服务器的反向代理功能。

3、Netty 的理解不仅可以帮助你深入掌握 Nginx、Tomcat、Jetty 等服务器的工作原理,还能让你通过定制编解码协议实现特定协议的服务器,在高并发环境中,Netty 基于 Java NIO 技术封装,提供高性能解决方案,有效解决多线程服务器的线程创建和调度压力,NIO 的非阻塞模式通过事件机制让单个线程处理多个任务,大大提升了资源利用率。

Netty 学习基础:BIO、NIO、AIO

1、在 Java 编程中,处理 Input/Output(IO)操作的模型至关重要,Java 主要支持四种 IO 模型:BIO、NIO、AIO 和 Netty,我们将通过实例和应用场景深入解析它们的使用和注意事项,BIO 模型,即阻塞式 IO,其优点在于操作简单,但在高并发场景下,线程会被阻塞,影响性能。

2、回顾 Netty 的 I/O 线程模型,包括 BIO、NIO、I/O 多路复用、信号驱动 IO、AIO,以及 Netty 如何通过封装简化对 Java NIO 包的使用,Netty 采纳的 Reactor 线程模型基于单个线程使用 Java NIO 包中的 Selector 进行监听,处理事件并分发给事件处理程序。

3、在 Java 中,BIO、NIO 和 AIO 都得到了支持,NIO 在 Java 7 中被引入为 NIO2,Netty 基于 NIO 实现,但拥有自己的模型,本质上都是 IO 多路复用,需要澄清的是,BIO 是同步阻塞 IO,NIO 是同步非阻塞 IO,而 AIO 是异步非阻塞 IO,select、poll、epoll 和 NIO 之间的关系主要在于它们都是 NIO 的实现手段。

Tomcat、Undertow、Jetty 和 Netty 的区别

1、优雅关闭适用于 Tomcat、Jetty 和 Undertow,Tomcat 和 Jetty 在网络层立即停止接收请求,而 Undertow 会继续接收请求直到返回 503 服务不可用错误,需要注意的是,优雅关闭需要在业务需要时手动开启,Tomcat 的生效版本需要为 8.5 或以上。

2、理解 Netty 可以让你深入理解 Nginx、Tomcat、Jetty 等服务器的工作原理,Netty 允许你通过定制编解码协议实现特定协议的服务器,在高并发环境下,Netty 基于Java NIO技术封装,提供高性能解决方案,有效解决多线程服务器的线程创建和调度压力,NIO 的非阻塞模式通过事件机制让单个线程处理多个任务,大大提升了资源利用率。

3、在 Web 容器方面,Tomcat 的使用最为广泛,但近年来红帽的 Undertow 也逐渐崭露头角,Jetty 在实际生产中并没有明显优势,但在测试环境中可能会被使用,有能力的公司会选择 Netty 自行实现高性能的 Web 容器,在 ORM 框架方面,MyBatis 在国内占据主导地位,而在国外,JPA 体系(包括 Spring Data JPA、Hibernate)则更为流行。

4、Netty 是一个强大的网络通信框架,与 Tomcat 的最大区别在于它支持多种通信协议,Netty 能够通过编程自定义各种协议,并通过 codec 实现字节流的编码和解码,这使得 Netty 在实现类似 Redis 访问功能上表现出色。

5、Tomcat(默认)、Jetty(Netty 的 Web 部分)、Undertow 追求高并发性能:Undertow 自动实现优雅停机:Jetty,其他服务器需要实现 ApplicationListener 的 closeEvent,Tomcat 支持 BIO 和 NIO,具体应该通过 JMeter 压测观察哪种更合适,Tomcat 相对稳定,是默认内置的选择。