什么是websocket?它和HTTP有什么联系?_WebSocket入门教程
WebSocket(网络套接字)是一种计算机通信协议,它能在单个 TCP 连接上提供全双工(bidirectional)通信通道。简单来说,它允许客户端(例如浏览器)和服务器之间建立一个持久的、双向的连接,双方可以随时发送和接收数据,而无需像传统 HTTP 那样每次通信都重新建立连接。
WebSocket 与 HTTP 的联系
WebSocket 和 HTTP 之间存在密切的联系,但它们在设计和用途上有所不同:
1. HTTP 是 WebSocket 连接的“起点”
WebSocket 连接的建立始于一个HTTP 握手(handshake)。当客户端想要建立 WebSocket 连接时,它会向服务器发送一个特殊的 HTTP 请求,其中包含 Connection: Upgrade
和 Upgrade: websocket
等头部信息,表示希望将当前 HTTP 连接“升级”为 WebSocket 连接。如果服务器支持 WebSocket 协议,它会回复一个 HTTP 101 状态码,表示协议切换成功。一旦握手完成,这个连接就不再是 HTTP 连接,而是升级为持久的 WebSocket 连接。
2. 底层协议相同
WebSocket 和 HTTP 都运行在 TCP (传输控制协议) 之上。这意味着它们都依赖于 TCP 来提供可靠的数据传输。
3. 设计理念和通信模型不同
-
HTTP (超文本传输协议):
-
请求-响应模型 (Request-Response Model):HTTP 遵循一种“客户端请求,服务器响应”的模式。每次客户端需要数据时,都会发送一个请求,服务器响应后,连接通常会关闭(除非使用 Keep-Alive)。
-
无状态 (Stateless):HTTP 是无状态的,这意味着服务器不会记住之前请求的任何信息。每个请求都是独立的。
-
高开销:每次请求都可能涉及到连接的建立和关闭,以及发送额外的 HTTP 头部信息,这会增加通信开销和延迟。
-
适用场景:适用于获取静态资源、一次性数据请求等场景,例如浏览网页、下载文件。
-
-
WebSocket:
-
全双工通信 (Full-Duplex Communication):一旦 WebSocket 连接建立,客户端和服务器可以同时向对方发送和接收数据,无需等待对方的响应。
-
持久连接 (Persistent Connection):连接一旦建立,会一直保持开放状态,直到客户端或服务器明确关闭它。
-
低延迟、低开销:由于连接是持久的,避免了重复的连接建立和关闭开销。数据传输的帧非常小,减少了每次消息的开销,从而实现更低的延迟和更高的效率。
-
有状态 (Stateful):WebSocket 连接是“有状态”的,因为连接会一直保持,服务器可以记住该连接的状态信息。
-
适用场景:适用于需要实时双向通信的场景,例如:
-
在线聊天应用(如微信、Slack)
-
多人在线游戏
-
实时数据推送(如股票行情、体育赛事比分直播、新闻推送)
-
协同编辑工具(如 Google Docs)
-
IoT (物联网) 设备通信
-
实时通知和警报
-
-