WebSocket 和 HTTP 是两种在网络通信中广泛使用的协议,它们各自具有独特的特点和适用场景。
一、WebSocket 和 HTTP 的异同
-
相同点
-
都基于 TCP 协议:WebSocket 和 HTTP 都建立在 TCP 之上,提供了可靠的、面向连接的通信。
-
都是应用层协议:它们都在网络协议的应用层上工作,用于在客户端和服务器之间交换数据。
-
-
不同点
-
连接类型:
- HTTP:通常是无状态的,每次请求都会建立一个新的连接(或重用现有的连接),请求 完成后连接就会关闭(对于 HTTP/1.1 和 HTTP/2,连接可能会被保持一段时间以复用)。
- WebSocket:是一种持久的连接,一旦建立,就可以在客户端和服务器之间保持打开状态,直到被明确关闭。这使得 WebSocket 非常适合需要实时通信的场景。
-
数据格式:
- HTTP:基于请求-响应模型,请求和响应都有固定的格式(如 HTTP 头和正文)。
- WebSocket:通过帧(Frame)来传输数据,这些帧可以是文本帧或二进制帧,没有像 HTTP 那样的严格格式要求。
-
使用场景:
- HTTP:适用于大多数基于网页的应用,特别是那些不需要实时数据更新的应用。HTTP 还广泛用于 API 设计,允许客户端和服务器之间进行数据的交换。
- WebSocket:非常适合需要实时通信的应用,如在线游戏、实时聊天应用、实时数据推送等。
-
-
使用场景
-
HTTP:
- 网页浏览:用户通过 HTTP 请求获取网页内容。
- RESTful API:为客户端提供数据接口,允许客户端与服务器之间进行数据的交换。
- 文件传输:通过 HTTP 协议上传和下载文件。
-
WebSocket:
- 实时聊天应用:允许用户之间实时发送和接收消息。
- 在线游戏:保持玩家之间的实时通信,同步游戏状态。
- 实时数据推送:如股票价格、新闻更新等,服务器可以主动向客户端推送数据。
-
二、WebSocket握手过程简述:
WebSocket协议建立在HTTP协议之上,用于在单个TCP连接上进行全双工通讯。WebSocket连接的建立始于一个HTTP请求,这个请求被特别地标记为意图“升级”到WebSocket协议。这个HTTP请求和随后的响应过程被称为“握手”。
-
客户端发起请求:客户端发送一个HTTP请求到服务器,请求中包含了几个特定的头部字段,如Upgrade: websocket、Connection: Upgrade和Sec-WebSocket-Key。这些字段告诉服务器,客户端希望将连接升级到WebSocket协议。
-
服务器响应:服务器验证客户端的请求后,会返回一个HTTP响应,状态码为101(Switching Protocols),表示协议切换成功。响应中也包含几个特定的头部字段,如Upgrade: websocket、Connection: Upgrade和Sec-WebSocket-Accept。Sec-WebSocket-Accept是一个基于客户端发送的Sec-WebSocket-Key计算得到的值,用于确保响应确实是针对客户端的请求的。
-
握手完成:一旦服务器返回了包含正确头部字段的101状态码响应,WebSocket握手就完成了,客户端和服务器之间的连接就升级为了WebSocket连接,可以进行全双工通讯了
-
一个基于Flask和HTML的WebSocket示例:
https://blog.csdn.net/qq_52011411/article/details/141568379