Netty源码解析系列三:Netty与Tomcat的区别

2023-10-29

Netty与Tomcat的区别

  • 作用不同:Tomcat 是 Servlet 容器,可以视为 Web 服务器,而 Netty 是异步事件驱动的网络应用程序框架和工具用于简化网络编程,例如TCP和UDP套接字服务器。
  • 协议不同:Tomcat 是基于 http 协议的 Web 服务器,而 Netty 能通过编程自定义各种协议,因为 Netty 本身自己能编码/解码字节流,所有 Netty 可以实现,HTTP 服务器、FTP 服务器、UDP 服务器、RPC 服务器、WebSocket 服务器、Redis 的 Proxy 服务器、MySQL 的 Proxy 服务器等等。
  • 使用的Reactor模型不同:Tomcat使用的是单Reactor+多线程模型,Netty采用了主从Reactor模型实现,其中主Reactor在Netty中对应Boss group 线程组,子Reactor对应Worker Group 线程组。主Reactor仅负责建立连接,工作简单,一般设置1个线程就足够。在主Reactor建立好连接后,将其注册到Worker Group线程组,触发相应的IO事件,最终由Pipeline中的多个Handler进行有序处理

单Reactor+多线程模型

Tomcat使用的这种模型

在这里插入图片描述

Netty的reactor模型

在这里插入图片描述

参考

  • https://mp.weixin.qq.com/s?__biz=MzU3MzgwNTU2Mg==&mid=2247487309&idx=2&sn=a33cc56116cb7891145394f9c5353be3&chksm=fd3d49d8ca4ac0ce28cd0a543109d60db47e8be60d63c6951fa30e4ab4c812f9025286fa5c37&scene=21#wechat_redirect

  • https://zhuanlan.zhihu.com/p/427895307

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Netty源码解析系列三:Netty与Tomcat的区别 的相关文章

  • 检查发送到网页的请求数

    我正在编写一个 Java 多线程应用程序 它可以访问不同 Web 服务器的数百万个 有时甚至数十亿个 URL 这个想法是检查这些 URL 是否给出有效的 200OK 响应或 404 其他代码 我如何知道我的程序是否不会在他们的服务器上造成高
  • Java中的文字赋值[重复]

    这个问题在这里已经有答案了 定义上有什么区别 double example 23 1d or double example 23 1 为什么long float double可以以l f d结尾 之间没有区别double example 2
  • Java 流 - 按嵌套列表分组(按第二顺序列出)

    我有以下数据结构 每个学生都有一个州列表 每个州都有一个城市列表 public class Student private int id private String name private List
  • 我们可以在不使用 main 方法、静态变量和静态方法的情况下在控制台上打印 java 消息吗?

    public class Test param args 1st way public static void main String args TODO Auto generated method stub System out prin
  • 初始堆大小无效。无法创建Java虚拟机

    我遇到了下一个问题 我尝试通过startup bat手动启动Tomcat 但似乎没有显示任何结果 然后我尝试运行shutdown bat 控制台显示如下 D apache tomcat 7 0 35 bin gt startup bat U
  • HTTP KeepAlive 连接已被服务器关闭,但客户端同时发送了请求

    场景如下 有一个 http 反向代理 它有一个与应用程序服务器的持久连接池 它已收到客户端的请求 并在检查连接打开后向后端发出相同的请求 同时 服务器在收到请求之前关闭连接 代理失败 从后端读取错误 错误被发送到客户端 应如何处理这种竞争条
  • EL 通过 Scriptlet

    在 JSP 中使用 EL 相对于 scriptlet 的优势是什么 EL 被认为是无脚本语言 EL 使 JSP 免受容易出错原始 Java 代码并强制您根据 MVC 思想编写 JSP EL 或像 JSTL 这样的标签库 不可能实现的任何事情
  • 全静态方法和应用单例模式有什么区别?

    我正在创建一个数据库来存储有关我的网站用户的信息 我正在使用 stuts2 因此使用 Java EE 技术 对于数据库 我将创建一个 DBManager 我应该在这里应用单例模式还是将其所有方法设为静态 我将使用这个 DBManager 进
  • MediaPlayer.create() 始终返回 null

    我以前用过媒体播放器 从来没有遇到过这个问题 每当我尝试使用 MediaPlayer create 时 该方法都会给我 null 并且我无法播放声音 我有什么遗漏的吗 public class Game extends Activity p
  • Java 中的 MP4 容器编写器

    我想找到一个免费的 Java MP4 容器 编写器 我不需要编码器 只需要能够根据预期值写入正确原子的编码器 Bonus对于这样一个库 也可以编写 有效 F4V 我更喜欢纯 Java 解决方案 而不是使用 JNI 或外部可执行文件的解决方案
  • 无法自动装配 org.springframework.mail.javamail.JavaMailSender

    尝试运行我的应用程序时遇到以下问题 所有的东西都调试过了 还是一无所获 IDE 毫无问题地找到了 bean 所以我对这里发生的情况感到非常困惑 SEVERE Exception sending context initialized eve
  • JFrame Glasspane 也优于 JDialog,但不应该

    我有一个带有 Glasspane 的 JFrame 未装饰 该框架打开一个 JDialog 也未装饰 也有一个 glassPane 并隐藏自身 setVisible false Glasspanes 通过 setGlassPane 设置 对
  • 获取包中声明的所有 Java 类的名称

    我正在编写一个功能 它将有助于将类放入我的程序的某个包中 另外 我只想要子类某个类的类 我需要这些类才能调用它们的静态方法 有没有一种自动的方法来做到这一点 如果是的话 速度慢吗 如果我不清楚 我想要的是这样的 ArrayList
  • Java LRU 缓存使用 LinkedList

    堆栈溢出的新手 所以请不要介意我以菜鸟的方式问这个问题 我正在尝试使用链表实现 LRU 缓存 我在这里看到了使用 linkedHashMap 和其他数据结构的其他实现 但对于这种情况 我正在尝试使用链表创建最佳优化版本 正如我在技术期间被问
  • javax.xml.bind.JAXBException: 类 *** 及其任何超类在此上下文中均未知

    我正在尝试通过 REST Web 服务传递对象 以下是我的课程 使用一些示例代码解释了我需要的功能 Rest Web 服务类方法 POST Path find Consumes MediaType APPLICATION FORM URLE
  • 路由和干净路径(无主题标签)在 angularJS 中不起作用

    伙计们 这让我发疯了 我为此奋斗了几个小时 却找不到解决方案 我知道为了从 URL 路径中清除主题标签 我需要使用 locationProvider html5Mode true 但由于某种原因 这对我来说效果不佳 我使用 tomcat 7
  • 在 REST Web 服务中接受逗号分隔值

    我正在尝试接收 REST URI 中以逗号分隔值形式的字符串列表 示例 http localhost 8080 com vogella jersey first rest todo test 1 abc test 其中 abc 和 test
  • 更新分页。是否可以?

    他们是否存在一些方法来处理更新分页 例如我有 100 行类型 Id private Integer id Column private boolean flag Column private Date last 一开始它们看起来像 id f
  • 获取Java中ResultSet返回的行数

    我用过一个ResultSet返回一定数量的行 我的代码是这样的 ResultSet res getData if res next System out println No Data Found while res next code t
  • 使用 PDFBox 在 Android 中创建 PDF

    我正在尝试通过我的 Android 应用程序创建 PDFPDFBoxapi 但出现以下错误 java lang NoClassDefFoundError org apache pdfbox pdmodel PDDocument 我已经将以下

随机推荐

  • DM JDBC 使用 Hikaricp连接池框架开发示例

    一 DM JDBC 配置指南 达梦数据库提供的JDBC驱动windows放置路径 D dmdbms drivers jdbc 具体数据库安装路径以实际为准 JDK1 5版本 使用 DmJdbcDriver15 jar JDK1 6版本 使用
  • Vue 3.0 全家桶 + Vite 从零配置开发环境、生产环境

    上篇文章我们对比了 Vite 与 Webpack 的差异 接下来 准备将项目中用到的 Webpack 5 0 替换为 Vite 2 0 我们先着手从零配置开发 生产环境 文章目录 一 初始化 1 初始化 package json 2 安装
  • 对抗验证概述

    了解如何实施对抗性验证 以建立分类器来确定您的数据是来自训练还是测试集 如果可以这样做 则您的数据有问题 并且对抗验证模型可以帮助您诊断问题 如果您要在Kaggle上研究一些获胜的解决方案 则可能会注意到对 对抗性验证 的引用 像这样 它是
  • QT5无法输入中文,如何解决???

    环境 UBUNTU 12 04 LTS 最近在Ubuntu下安装了QT5 0 2版本 在尝试完跑实例程序后 自己想做一个Socket的TCP IP通信例子 但是悲剧的发现QT5中竟然不能切换输入法到中文 所做尝试包括 1 换输入法fctix
  • 分页组件封装

    scss 分页 el pagination text align right margin top 20px span el pagination total position absolute left 0 is background e
  • 白盒测试基本方法

    白盒测试的概述 由于逻辑错误和不正确假设与一条程序路径被运行的可能性成反比 由于我们经常相信某逻辑路径不可能被执行 而事实上 它可能在正常的情况下被执行 由于代码中的笔误是随机且无法杜绝的 因此我们要进行白盒测试 白盒测试又称结构测试 透明
  • Maven : has broken classes path unknown

    1 美图 2 背景 windows下 因为要整理Maven 的pom文件 我加入了一个
  • Java提高篇——equals()方法和“==”运算符

    equals 超类Object中有这个equals 方法 该方法主要用于比较两个对象是否相等 该方法的源码如下 public boolean equals Object obj return this obj 我们知道所有的对象都拥有标识
  • wsl子系统Ubuntu18.04,cuDNN安装

    如果觉得本篇文章对您的学习起到帮助作用 请 点赞 关注 评论 留下您的足迹 本文主要wls子系统Ubuntu18 04安装cuDNN 安装cudnn坑巨多 因此记录以备日后查看 同时 如果能够帮助到更多人 也不胜荣幸 文章目录 一 下载安装
  • Xcopy 复制文件和目录,包括子目录

    Xcopy 复制文件和目录 包括子目录 语法 xcopy Source Destination w p c v q f l g d mm dd yyyy u i s e t k r h a m n o x exclude file1 fil
  • Spring FeignClient 遇到的参数问题(RequestParam.value() was empty on parameter 0)

    报错 Caused by java lang IllegalStateException RequestParam value was empty on parameter 0 代码 PostMapping value org getOrg
  • 下载徐小明新浪博客全部博文链接

    利用爬虫把徐小明新浪博客里的所有博文链接爬下来 保存到脚本所在路径的csv文件中 python2 7代码 把起始博文目录链接换成其他的也是完全可以的 详细内容请关注微信公众号 岛城窝窝 代码如下 usr bin env python cod
  • sklearn分类任务模型评价指标汇总与AUC-ROC曲线及代码示例

    文章目录 1 分类指标 2 整合工具函数 3 使用示例 1 分类指标 二分类可以参考下图 准确率 预测对的样本数 全部样本数 精确率 被预测出的正例样本数 预测为正例的样本数 召回率 预测且真的是正例的样本数 正例的样本数 二分类F1 2
  • 《Spring Boot实战》之二:开发第一个应用程序

    本章使用Spring Boot实现一个简单的例子 主要包括两个知识点 使用Spring Boot的起步依赖 使用Spring Boot自动进行Spring的配置 2 1 运用Spring Boot 下面将使用Spring Boot创建一个简
  • [力扣]只出现一次的数字

    给定一个非空整数数组 除了某个元素只出现一次以外 其余每个元素均出现两次 找出那个只出现了一次的元素 说明 你的算法应该具有线性时间复杂度 你可以不使用额外空间来实现吗 作者 力扣 LeetCode 链接 https leetcode cn
  • Linux中级实战讲解--Mysql-galera集群

    Galera Cluster 介绍 Galera是一个MySQL 也支持MariaDB Percona 的同步多主集群软件 主要功能 同步复制 Active active的多主拓扑结构 真正的multi master 即所有节点可以同时读写
  • Android 10.0 禁用插入耳机时弹出的保护听力对话框

    1 前言 在10 0的系统开发中 在某些产品中会对耳机音量调节过高限制 在调高到最大音量的70 的时候 会弹出音量过高弹出警告 所以产品 开发的需要要求去掉这个音量弹窗警告功能 2 禁用插入耳机时弹出的保护听力对话框的核心类 framewo
  • 什么是物模型?阿里小米京东物模型规则对比

    什么是物模型 物模型是产品数字化的描述 定义了产品的功能 物模型将不同品牌不同品类的产品功能抽象归纳 形成 标准物模型 便于各方用统一的语言描述 控制 理解产品功能 物模型由若干条 参数 组成 参数按描述的功能类型不同 又分为属性 方法和事
  • shc gzexe 将shell脚本转换为二进制的可执行文件

    第一种方法 gzexe 这种加密方式不是非常保险的方法 但是能够满足一般的加密用途 可以隐蔽脚本中的密码等信息 它是使用系统自带的gzexe程序 它不但加密 同时压缩文件 使用方法 gzexe file sh它会把原来没有加密的文件备份为
  • Netty源码解析系列三:Netty与Tomcat的区别

    Netty与Tomcat的区别 作用不同 Tomcat 是 Servlet 容器 可以视为 Web 服务器 而 Netty 是异步事件驱动的网络应用程序框架和工具用于简化网络编程 例如TCP和UDP套接字服务器 协议不同 Tomcat 是基