WebSocket
-
定义与概述
- 定义:WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它使得客户端和服务器之间的数据交互更加实时、高效,能够在浏览器和服务器之间建立持久的连接,允许双向数据传输。
- 背景与目的:传统的 HTTP 协议是一种无状态的请求 - 响应协议,客户端每次请求都要建立新的连接,服务器响应后连接即关闭。这种方式对于实时性要求高的应用(如实时聊天、在线游戏等)效率较低。WebSocket 协议应运而生,它提供了一种在 Web 环境下的实时通信解决方案,弥补了 HTTP 协议在实时通信方面的不足。
-
工作原理
- 连接建立 :
- 首先,客户端通过发送一个 HTTP 请求来发起 WebSocket 连接。这个请求包含特定的头部信息,其中
Upgrade
头部字段设置为websocket
,Connection
头部字段设置为Upgrade
,用于告知服务器客户端希望升级协议为 WebSocket。例如:
- 首先,客户端通过发送一个 HTTP 请求来发起 WebSocket 连接。这个请求包含特定的头部信息,其中
GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec - WebSocket - Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec - WebSocket - Version: 13 - 连接建立 :
- 服务器收到请求后,如果支持 WebSocket 协议并且同意升级连接,会返回一个状态码为
101 Switching Protocols
的响应,表示协议切换成功,连接从 HTTP 升级为 WebSocket。此时,WebSocket 连接正式建立,双方可以开始通过这个连接进行数据传输。 - 数据传输 :
- 一旦连接建立,数据就可以在客户端和服务器之间双向传输。WebSocket 协议使用自己的帧格式来封装数据。数据帧包含操作码(用于标识数据类型,如文本、二进制等)、有效载荷长度和数据内容等信息。这种帧格式使得 WebSocket 能够高效地传输各种类型的数据。
- 与传统 HTTP 不同,WebSocket 连接是持久的,只要连接没有被关闭或者出现异常,双方就可以随时发送和接收数据,实现实时通信。例如,在一个实时聊天应用中,用户发送的消息可以立即通过 WebSocket 连接发送到服务器,服务器也可以马上将消息转发给其他相关用户。
- 连接关闭 :
- 当客户端或者服务器希望关闭 WebSocket 连接时,可以发送一个关闭帧来终止连接。这个关闭帧包含一个关闭码和一个可选的关闭原因。对方收到关闭帧后,会进行一些清理工作,然后关闭连接。
- 优势
- 实时性强:能够实现真正的实时双向通信,数据可以即时地在客户端和服务器之间传递,大大提高了应用的实时响应能力。例如在金融交易系统中,实时的价格更新和交易指令可以通过 WebSocket 快速传输,让用户能够及时做出决策。
- 性能高效:通过在单个 TCP 连接上进行全双工通信,避免了 HTTP 协议频繁建立和关闭连接所带来的开销。减少了网络延迟和带宽消耗,提高了数据传输的效率。例如在大型多人在线游戏中,玩家的操作和游戏状态更新可以通过 WebSocket 高效地传输,提升游戏体验。
- 跨平台和兼容性好:WebSocket API 在现代浏览器中得到了广泛支持,同时也有各种服务器端语言和框架提供了对 WebSocket 的支持。这使得开发人员可以很容易地在不同的平台和环境中实现实时通信功能。例如,一个 Web 应用可以同时在桌面浏览器和移动浏览器中通过 WebSocket 实现相同的实时功能。
- 应用场景
- 实时聊天应用:是 WebSocket 最典型的应用场景之一。用户在聊天窗口发送的消息可以通过 WebSocket 实时地发送到服务器,服务器再将消息广播给其他参与聊天的用户,实现即时聊天的功能。
- 在线游戏:在多人在线游戏中,玩家的操作(如移动、攻击等)以及游戏状态(如角色位置、生命值等)的更新需要实时同步。WebSocket 可以保证这些信息在客户端和服务器之间快速、准确地传输,提供流畅的游戏体验。
- 实时数据监控与推送:在工业控制、物联网等领域,需要实时监控设备的状态数据(如温度、压力、电量等),并将这些数据推送给监控中心。WebSocket 可以有效地实现数据的实时推送,让监控人员能够及时了解设备的运行情况。
WebSocket升级流程
场景,在网页刷刷图文我们用的是HTTP协议,打开网页游戏时,就得切换到WebSocket协议。
升级过程简单来说,客户端向服务器发送HTTP请求,包含特殊头信息。服务器接收到请求后,检查请求头中的信息,确认是否支持并愿意连接升级。一切正常的话,服务器会返回HTTP响应,状态码为101,表示成功升级到WebSocket协议。客户端接收到服务器响应后,WebSocket握手过程就完成了。双方就可以通过该连接进行双向的全双工的数据传输。
WebSocket和Socket区别
-
Socket其实就是等于IP地址+端口+协议
具体来说,Socket是一套标准,完成了对TCP/IP的高度封装,屏蔽网络细节,方便开发者更好地进行网络编程。
-
WebSocket是一个持久化的协议,他是伴随H5而出的协议,用来解决http不支持持久化连接的问题。