Netty和Tomcat

Netty和Tomcat

特性 Netty Tomcat
定位 网络编程框架 Servlet容器 / Web服务器
核心模型 异步事件驱动 基于Servlet规范的请求-响应
协议支持 灵活。可构建HTTP、WebSocket及任何自定义协议。 固定。主要面向HTTP/1.x, HTTP/2,并通过升级支持WebSocket。
使用方式 编程组装协议栈和业务逻辑。 配置和部署符合Servlet规范的Web应用(WAR包)。
开箱即用 否,需要开发。 是,下载即可运行Web项目。
性能 极致的性能优化,更少的抽象层。 性能优秀,但存在Servlet规范带来的抽象层开销。
典型场景 游戏服务器、IoT、RPC框架、微服务网关、需要自定义协议的任何场景。 传统的Web应用、RESTful API服务、基于Spring MVC等Web框架的应用。
  • Netty 是一个基于NIO的网络应用开发框架,它可以用来实现HTTP服务器、WebSocket服务器以及任何自定义协议的服务器/客户端。
  • Tomcat 是一个主要基于NIO Connector实现的、符合Servlet规范的HTTP Web服务器和Servlet容器。它本身就是一个成熟的产品,主要用于部署和运行Web应用程序。

简单来说:如果你想从零开始构建一个特定协议的服务器,或者对性能有极致要求,用Netty。如果你想快速部署一个遵循标准规范的Web应用,用Tomcat。

  • Netty是一个可以实现各种协议服务器的框架,Tomcat是一个已经实现HTTP协议的模板服务器

线程模型对比

角色 Tomcat (NIO) Netty 职责简述
接收连接 Acceptor (1个或多个) Boss Group (1个或多个线程) 接受客户端TCP连接
轮询IO事件 Poller (1个或多个) Worker Group (核心) 轮询Selector,处理读写就绪事件
执行业务 Worker (线程池) Worker Group中的同一线程 或 自定义业务线程池 实际处理业务逻辑(解码、编码、业务计算)

最大的区别在于:

  • Tomcat:Poller(IO轮询) 和 Worker(业务执行)是分开的线程池
  • Netty:Worker Group 中的线程 既做IO轮询,又执行业务逻辑(除非你手动添加 BusinessExecutorGroup)。

如果你想在 Netty 中实现 Tomcat 的“分离模式”,需要这样做:

// 模拟 Tomcat 的模型
EventLoopGroup bossGroup = new NioEventLoopGroup(1);   // 相当于 Acceptor
EventLoopGroup workerGroup = new NioEventLoopGroup(4); // 相当于 Poller + 默认Worker

// 创建一个独立的业务线程池(模拟 Tomcat 的 Worker 线程池)
ExecutorService businessExecutor = Executors.newCachedThreadPool();

ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup)
 .childHandler(new ChannelInitializer<SocketChannel>() {
     @Override
     protected void initChannel(SocketChannel ch) {
         ch.pipeline().addLast(new ChannelInboundHandlerAdapter() {
             @Override
             public void channelRead(ChannelHandlerContext ctx, Object msg) {
                 // 主动把业务抛给独立线程池,模拟 Tomcat
                 businessExecutor.submit(() -> {
                     // 执行耗时业务(比如查询数据库)
                     heavyBusinessLogic();
                     ctx.writeAndFlush(msg);
                 });
             }
         });
     }
 });
posted @ 2025-11-14 17:48  deyang  阅读(24)  评论(0)    收藏  举报