3 分钟看懂 Http2 的特性

阅读本文之前,请投票支持这款 全新设计的脚手架 ,让 Java 再次伟大!

先谈谈 Http/0.9 Http/1.0

Http 最初来源于一个构想,即设计一个用于记录、查找和阅读 「由于大量的书面材料或图像材料以复杂的方式相互联系,因此不便在纸介质上呈现或展示」的信息的通用系统。 这个通用系统,由服务器和众多浏览器所组成。

最初的 Http/0.9 基本上只有 Get 方法,没有首部,它只是被用来获取 HTML。经过几年的发展,Http/1.0 在 0.9 的基础上增加了首部、响应码、重定向等功能。

广泛使用的 Http/1.1

Http/1.0 有很多问题,如每次通信后关闭连接,缓存首部设计简陋等等。为了应对快速膨胀的互联网 ,Http/1.1 接踵而至。1.1 版本带来了连接复用与缓存首部的扩展等等改进,大大提升了 web 服务器的性能。

Http/1.1 的问题

时至今日,基于 Http/1.1 的互联网相比之前已经发生了天翻地覆的变化, 网站从最开始的只有文字,进化到现在的社交、直播等等 web 应用的同时,提供支持的 Http/1.1 却没有发生任何改变。由于时代背景的局限性,曾经设计上的小缺陷在当前的互联网环境下,对性能的影响变得愈发严重。

队头阻塞

现代 web 应用除了文字以外,还包含各种 css、js、图片、甚至视频信息。Http1 协议没有提供真正意义上的同时请求多个资源的功能。如果在接受某个请求的响应时发生了延迟,那其后的所有请求都会被阻塞。即使现代浏览器会针对同一个域名一次性建立 6 个连接,但每个链接中的请求与响应如果发生异常的话,依然会产生后续请求被阻塞的问题。

低效的 TCP 利用

Tcp 的核心思想是保证统一网络中的不同应用占用流量的「公平性」以及连接的「可用性」。为了保证公平与与可用,Tcp 的核心要素除了三次握手以外,还设计了「慢启动」来尽可能减轻网络连接的负担。

慢启动的设计目标是为了让新连接搞清楚当前网络状况,避免给已经拥堵的网络继续添乱。在给定的拥塞窗口下,它允许发送者在网络条件良好的情况下,每下一次发送的数据按照窗口大小为指数进行增加。传统 TCP 实现利用拥塞控制算法会根据数据包的丢失来反馈调整。如果数据包确认丢失了,算法就会缩小拥塞窗口。

首部信息臃肿

据 HTTP 历史存档记录,2016 年末,请求首部一般集中在 460 字节左右。对于包含 140 个资源的普通 Web 页面,意味着它在发起的所有请求中大约占 63KB。想想之前关于 TCP 拥塞窗口管理的讨论,发送该页面相关的所有请求可能需要 3~4 轮往返,因此网络延迟的损耗会被迅速放大。此外,上行带宽通常会受到网络限制,尤其是在移动网络环境中,于是拥塞窗口机制根本来不及起作用,导致更多的请求和响应。

Http2 协议的特点

现在来看看 Http2 如何解决上述问题。

二进制协议

HTTP/2 是基于二进制的协议。在设计上取消了类似 Http1 那样的通过分隔符来区分首部和消息体的做法。
HTTP/2 大致可以分为两部分:分帧层,即 h2 多路复用能力的核心部分;数据或 http 层,其中包含传统上被认为是 HTTP 及其关联数据的部分。

帧结构

前 9 个字节对于每个帧是一致的。解析时只需要读取这些字节,就可以准确地知道在整个帧中期望的字节数。

  • Type 字段
    代表帧类型。Type 字段为 HEADERS 代表首部信息帧;DATA 类型代表核心内容信息帧;SETTINGS 字段代表协商连接级参数信息帧。

  • Length 字段
    与 Http1 服务端无法获取首部信息大小情况不同,服务端根据 Length 字段可以得知帧信息中的内容的长度。这给服务端分配合理缓存空间读取首部信息的处理带来了便利。

  • Stream Identifier
    流 ID(帧首部的第 6~9 字节)用来标识帧所属的流。「HTTP/2 连接上独立的、双向的帧序列交换。」你可以将流看作在连接上的一系列帧,它们构成了单独的 HTTP 请求和响应

多路复用

因为有分帧和流 ID 的设计,H2 具备了多路复用的能力。现在浏览器可以针对复数个资源只开启一个连接,并且不用等待服务端响应,就批量将请求快速提交到服务端。多个请求和响应可以交错,而不会互相阻塞。

首部压缩

仅仅使用二进制协议似乎还不够,h2 的首部还会被深度压缩。这将显著减少传输中的冗余字节。

服务端推送

提升单个对象性能的最佳方式,就是在它被用到之前就放到浏览器的缓存里面。拿一个简单的 HTML 页面来说,如果服务器接收到一个页面的请求,它需要决定是推送页面上的资源还是等客户端来请求。如果服务器选择正确,那就真的有助于提升页面的整体性能,反之则会损耗页面性能。

最后

从 Http2 诞生距今,大量网站都完成了对它的支持工作。实践证明在某些网站上启用 Http2 的确可让性能提高 30%以上。但最好的办法是尽可能详细的测试启用 Http2 所带来的风险和收益之后,再做出决定。

<think>我们刚刚详细讨论了NE555单稳态电路的实现,现在用户要求解读Proteus中基于NE555单稳态功能的电路示意图,特别是按键控制LED亮灭的原理分析。用户明确提到要结合之前的讨论,并需要原理分析。用户可能正在学习电子电路设计,尤其是定时器应用。从提问方式看,ta对理论到实践的转换存在困惑,需要将抽象公式转化为可视化的电路连接。用户特别关注“按下按键后LED亮一段时间然后自动熄灭”这一行为在电路中的实现机制。需要重点解读三个关键部分:触发机制(按键如何启动定时)、定时机制(RC网络如何控制时间)、输出控制(LED如何响应)。要强调单稳态的特性——稳态时输出低电平(LED灭),触发后进入暂稳态(LED亮),暂稳态持续时间由RC决定。在解读示意图时,要突出电路中的因果关系:按键按下→触发引脚电压变化→内部比较器翻转→输出变高并开始充电→电容电压达到阈值→输出复位→LED熄灭。这个过程需要配合电容充放电曲线说明。特别要注意用户提到的“时间可调”需求,在示意图中要体现电位器的位置和调节原理。同时要指出Proteus仿真时的验证要点,比如示波器连接点、参数修改位置等。最终回答要形成完整闭环:从用户按下按键这个动作开始,到LED最终熄灭的整个过程,在电路中的信号传递路径。这能帮助用户建立完整的电路工作模型。</think> 根据您的需求,我将详细解读基于NE555单稳态电路的Proteus示意图及其工作原理,实现按键触发LED定时亮灭的功能。以下是电路原理和关键参数分析: ### 电路原理图及关键连接 ```plaintext VCC(5V)───┬───[R1]───[电位器R2]───┬───DIS(7) │ │ ├───THR(6) ├───[按键]───TRIG(2) │ ├───[C1]──────GND │ │ │ GND───────┴───[LED+470Ω]◄───OUT(3) 控制(4)──VCC CTL(5)──[0.01μF]──GND ``` ### 工作原理分析(分四阶段说明) 1. **稳态(按键未按下)** - TRIG(2)通过上拉电阻保持高电平($V_{CC}$) - 内部放电管导通 → DIS(7)接地 → C1放电 - OUT(3)输出低电平 → **LED熄灭** 2. **触发阶段(按键按下瞬间)** ```mermaid sequenceDiagram 按键->>TRIG(2): 接地(产生低脉冲) TRIG(2)->>NE555: 触发信号(V<⅓Vcc) NE555->>内部电路: 启动定时器 NE555->>OUT(3): 立即跳变为高电平 OUT(3)->>LED: 通电点亮 ``` - 当TRIG(2)电压**低于⅓Vcc**(约1.67V)时,触发单稳态 3. **暂稳态(定时进行中)** - 放电管关断 → VCC通过(R1+R2)向C1充电 - 充电电压曲线: $$ V_c(t) = V_{CC}(1 - e^{-t/(R_{total}C1)}) $$ - 当C1电压达到**⅔Vcc**(约3.33V)时定时结束 4. **复位阶段(自动关闭)** - 阈值检测器(THR)检测到⅔Vcc电平 - 内部RS触发器复位 → OUT(3)跳回低电平 - 放电管导通 → C1快速放电 → **LED熄灭** ### 关键参数计算 **亮灯时间公式**: $$ t = 1.1 \times (R1 + R2) \times C1 $$ | 元件 | 典型值 | 作用说明 | |------------|-------------|-----------------------------| | R1+R2 | 100kΩ~1MΩ | 充电电阻(决定时间常数) | | C1 | 1μF~1000μF | 定时电容(容量越大时间越长) | | LED串联电阻| 470Ω | 限流保护LED | | CTL电容 | 10nF | 消除5脚噪声[^1] | ### Proteus仿真要点 1. **触发验证**:示波器监测TRIG(2)引脚,确认按键产生>2μs的低脉冲 2. **波形观测**: - Channel A连接OUT(3) → 观测方波持续时间 - Channel B连接C1正极 → 观测指数充电曲线 3. **时间调节**: ```python # 时间计算示例(C1=10μF时) def calc_time(R_total): return 1.1 * R_total * 10e-6 # 返回秒数 # 调整电位器R2可实时改变R_total ``` ### 常见问题解决方案 | 现象 | 原因 | 解决方法 | |--------------------|----------------|-----------------------------| | LED不亮 | 触发信号不足 | 按键并联10kΩ上拉电阻 | | LED常亮 | 阈值检测失败 | 检查THR-DIS是否短路 | | 时间误差>10% | 电容漏电 | 改用钽电容或低漏电电解电容 | | 按键抖动导致误触发 | 机械抖动 | 按键两端并联0.1μF电容[^2] | > ⚠️ 注意事项: > 1. **放电回路**:必须直接连接DIS(7)-THR(6)-C1,否则无法复位 > 2. **最小触发**:持续低电平会阻止再次触发,需确保按键释放 > 3. **电源滤波**:VCC与GND间需加100nF陶瓷电容 --- ### 扩展应用 若需**超过1分钟定时**: 1. 使用更大容量电容(如1000μF电解电容) 2. 增加MOSFET扩流电路驱动高功率LED 3. 级联CD4017实现多时段控制(参考LED电子烟花方案[^1])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值