短轮询,长轮询和websocket

前言:

有些时候我们需要进行消息推送, 假如用HTTP的方式,那么设备端需要不断轮询服务端,这样的方式对服务器压力太大,同时产生很多无效请求,且具有延迟性。 所以其实我们可以使用websocket。下面我们会介绍消息推送,基于http的两种通讯模式:短轮询和长轮询;另外还有websocket。

消息推送

消息推送是一种由服务器主动向客户端发送信息的技术,打破了传统 "客户端请求 - 服务器响应" 的被动模式。

其核心流程如下:

  1. 建立连接:客户端与服务器之间先建立网络连接,这个连接可以是短连接(如 HTTP)或长连接(如 WebSocket)。

  2. 事件触发:服务器端产生需要推送给客户端的事件(如订单状态更新、新消息提醒)。

  3. 消息下发:服务器将事件数据推送给客户端,无需等待客户端主动发起请求。

  4. 客户端接收与处理:客户端收到推送的消息后,进行展示或其他业务逻辑处理。

http协议

短轮询

原理:客户端以固定的时间间隔(如每 5 秒),主动向服务器发送 HTTP 请求询问是否有新消息。 工作过程:无论服务器是否有新数据,都会立即响应请求。若没有新数据,就返回空或无更新的标识。 优点:实现简单,无需特殊的服务器或客户端支持,基于标准 HTTP 协议。 缺点: 资源浪费:在没有新消息时,大部分请求都是无效的,会消耗服务器和网络资源。

长轮询

长轮询就是客户端发送请求给服务器,服务端会把这个请求挂起(阻塞),当服务端有新消息发送给客户端的时候,就可以直接响应给客户端。当客户端收到这个响应之后,再发送一次请求给服务端;

优点:

这样可以看出,长轮询实时性好;也能减少无效的请求 缺点: 服务器需要维护大量的挂起请求,对服务器的连接管理能力有一定要求。

讨论:

为什么长轮询延迟远小于短轮询 ?

"延迟",指的是从服务器产生新消息,到客户端收到这条消息的时间差 短轮询:客户端每隔固定时间(比如 5 秒)才问一次服务器。如果服务器在第 2 秒产生了新消息,客户端要等到第 5 秒的下一次轮询才能拿到它。 而长轮询:客户端的请求一直 "挂" 在服务器上,服务器一有新消息就立刻返回,延迟只取决于网络传输时间(通常是毫秒级)。长轮询的 "阻塞等待",是为了在消息产生的第一时间就把它推送给客户端

websocket

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它解决了传统 HTTP 协议只能由客户端主动发起请求、服务器被动响应的问题,让服务器也能主动向客户端推送数据。

核心特点

全双工通信 单一长连接:只需一次握手,就能建立一个持久的 TCP 连接,避免了 HTTP 短连接频繁建立和断开的开销。 低延迟:数据传输的头部信息很小,通信效率高,适合实时性要求高的场景(如聊天、直播、游戏)。 基于 HTTP 握手:它通过 HTTP 协议进行握手升级,所以能很好地兼容现有的网络基础设施(如防火墙、代理服务器)。

工作过程

1、握手阶段(HTTP 协议) 1)客户端发送一个特殊的 HTTP 请求,请求头中包含 Upgrade: websocket 和 Connection: Upgrade,表示想要将连接升级为 WebSocket。 2)服务器收到请求后,如果支持 WebSocket,就返回 101 Switching Protocols 响应,完成协议升级。 2、通信阶段(WebSocket 协议) 握手成功后,连接从 HTTP 协议切换为 WebSocket 协议。 此时,客户端和服务器就可以通过这个连接随时互相发送数据,不再需要每次都发起新的 HTTP 请求。

总结:

HTTP:基于 TCP,默认是短连接(HTTP/1.1 支持持久连接),通信模式是 "客户端主动请求,服务器被动响应"。短轮询和长轮询是基于 HTTP 实现的两种模拟实时通信的方式。 虽然长轮询比短轮询有了很大进步,但它本质上还是基于 HTTP 的'伪长连接 。 WebSocket:基于 TCP,是真正的长连接,支持全双工通信,服务器可以主动推送数据,是实现实时通信的最优方案。

相关推荐
MaximusCoder9 小时前
等保测评命令——Anolis Linux
linux·运维·服务器·网络·经验分享·安全·php
线束线缆组件品替网9 小时前
Adam Tech NPC-6-007-BU网线组件详解
服务器·网络·数码相机·智能路由器·电脑·51单片机·电视盒子
Striver-Diligent10 小时前
您的解决方案准确吗?一种用于增强通信网络可靠性的、面向故障的性能预测方法
网络·深度学习·机器学习·网络性能估计·数字孪生网络·网络预测
cheems952710 小时前
[网络原理]http协议理论基础以及wireshark抓包分析(二)
网络·http·wireshark
双星系统10 小时前
ABB机器人DSQC 679示教器电缆选型与故障排查(附原装型号对照表)
网络·数据库·机器人·工业4.0·工业机器人
炸炸鱼.10 小时前
Nginx 代理与缓存实战:正向、反向及网络层级详解
网络·nginx·缓存
5G行业应用10 小时前
6G未来网络架构ATHENA愿景——《2026韩国SK电讯6G白皮书》
网络·架构
一去不复返的通信er10 小时前
5G系统级仿真
网络·5g
北京耐用通信11 小时前
耐达讯自动化CC-Link IE转DeviceNet网关:破解三菱与欧姆龙PLC协同壁垒的工业实践
人工智能·科技·物联网·网络协议·自动化
cheems952713 小时前
[网络原理]http协议理论基础以及wireshark抓包分析(一)
网络·http·wireshark