一、概述
WebSocket是从HTML5开始支持的⼀种网页端和服务端保持长连接的消息推送机制。 传统的web程序都是属于"一问一答"的形式,即客户端给服务器发送了⼀个HTTP请求,服务器给客户端返回⼀个HTTP响应。
这种情况下,服务器是属于被动的一方,如果客户端不主动发起请求,服务器就无法主动给客户端响应 ,但像网页即时聊天这样的程序都是非常依赖“消息推送”的,即需要服务器主动推动消息到客户端。如果只是使用原生的HTTP协议,要想实现消息推送⼀般需要通过"轮询"的方式实现,而轮询的成本比较高、并且也不能及时地获取到消息的响应。
基于上述两个问题,就产⽣了WebSocket协议。WebSocket更接近于TCP这种级别的通信⽅式,⼀ 旦连接建立完成客⼾端或者服务器都可以主动的向对方发送数据。
二、对比HTTP(介绍特点)
WebSocket的特点在概述当中我们大概可以寻得一些蛛丝马迹,但还需要更加系统地来阐述。如果直接表述WebSocketpp的特性或者说特点,是很枯燥的。对于想入门的同学来说会有一些不知所云,可能看过就过去了,并不能很好地理解和感受,最终留不下什么印象。因此,这里我们用对比HTTP的方法来进行阐述。如果你准备开始了解WebSocket,那么你在网络部分不可能是一个一问三不知的小白,都是在向进阶学习、了解新技术的人群。那么你对HTTP再熟悉不过了,对比着来看,你会更加理解与加深印象。话不多说直接开始......
1. 通信模式对比
- HTTP
基于“请求—响应”模式,客户端主动发送请求,服务端被动响应。每次通信需要重新建立连接(无状态)。
- WebSocket
双向通信协议,建立连接后,客户端和服务端都可以主动发送消息(全双工)。连接建立后保持持续状态,不需要重复握手。
- HTTP更像是 “我问,你答” 的客服系统。
- WebSocket更像是电话通信,双方可以随时说话,不需要每次重新拨号。
2. 连接机制
- HTTP
每次请求都会创建一个新的连接,完成后立即关闭。这种模式虽然简单,但对于频繁通信的场景效率较低。
- WebSocket
只需一次握手,即可建立长连接。后续的通信都通过这个连接完成,避免了反复的连接开销,尤其适合实时性要求高的场景。
优势分析: WebSocket的连接机制更节省资源,特别是在需要频繁交互的场景(如聊天、游戏、实时更新数据等)。
3. 数据传输效率
- HTTP
每次请求都需要带上完整的请求头部信息,造成较大的额外开销。
- WebSocket
初次握手后,后续传输只需少量的帧头信息,数据包更加紧凑,减少了网络带宽的浪费。
- HTTP就像每次寄快递都需要填完整的收寄信息。
- WebSocket就像直接搭建了一条输送带,传输效率更高。
4. 实时性
- HTTP
对于实时性要求高的场景(如股票行情推送、在线聊天),需要不断轮询服务器获取最新数据,导致高延迟和资源浪费。
- WebSocket
支持服务器主动推送消息,无需轮询,实现毫秒级的低延迟实时通信。
优势分析: WebSocket的实时推送特性,使其成为需要即时响应场景的最佳选择(如在线游戏、协同编辑、物联网设备监控等)。
5. 使用场景
- HTTP
适用于大多数传统的Web应用场景,如网页浏览、表单提交、文件下载等。
- WebSocket
专为需要双向实时通信的场景设计,如:
- 在线聊天(如微信、Slack 等)
- 实时游戏(如在线多人竞技游戏)
- 实时更新(如股票行情、新闻推送)
- 物联网通信(如设备状态实时监控)
在实现WebSocket功能时,C++开发者可以选择使用WebSocket++,它是一款高效且易用的C++ WebSocket库。相比原生实现,WebSocket++提供了更高层次的封装,简化了开发流程。通过对比理解HTTP和WebSocket的特性,你会更清楚WebSocket++能为你的项目带来什么样的优势。
更多内容请看下回。