短轮询,长轮询和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,是真正的长连接,支持全双工通信,服务器可以主动推送数据,是实现实时通信的最优方案。

相关推荐
树℡独11 小时前
ns-3仿真之应用层(五)
服务器·网络·tcp/ip·ns3
zhang1338308907512 小时前
CG-09H 超声波风速风向传感器 加热型 ABS材质 重量轻 没有机械部件
大数据·运维·网络·人工智能·自动化
津津有味道12 小时前
易语言TCP服务端接收刷卡数据并向客户端读卡器发送指令
服务器·网络协议·tcp·易语言
酣大智13 小时前
接口模式参数
运维·网络·网络协议·tcp/ip
Genie cloud13 小时前
1Panel SSL证书申请完整教程
服务器·网络协议·云计算·ssl
24zhgjx-lxq14 小时前
华为ensp:MSTP
网络·安全·华为·hcip·ensp
ling___xi14 小时前
《计算机网络》计网3小时期末速成课各版本教程都可用谢稀仁湖科大版都可用_哔哩哔哩_bilibili(笔记)
网络·笔记·计算机网络
REDcker14 小时前
Linux 文件描述符与 Socket 选项操作详解
linux·运维·网络
Up九五小庞14 小时前
用arpspoof实现100%批量切断192.168.110.10 - 192.168.110.100 断网(双向欺骗)--九五小庞
网络·开源