> 技术文档 > 什么是websocket?它和HTTP有什么联系?_WebSocket入门教程

什么是websocket?它和HTTP有什么联系?_WebSocket入门教程

WebSocket(网络套接字)是一种计算机通信协议,它能在单个 TCP 连接上提供全双工(bidirectional)通信通道。简单来说,它允许客户端(例如浏览器)和服务器之间建立一个持久的、双向的连接,双方可以随时发送和接收数据,而无需像传统 HTTP 那样每次通信都重新建立连接。

WebSocket 与 HTTP 的联系

WebSocket 和 HTTP 之间存在密切的联系,但它们在设计和用途上有所不同:

1. HTTP 是 WebSocket 连接的“起点”

WebSocket 连接的建立始于一个HTTP 握手(handshake)。当客户端想要建立 WebSocket 连接时,它会向服务器发送一个特殊的 HTTP 请求,其中包含 Connection: UpgradeUpgrade: 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 (物联网) 设备通信

      • 实时通知和警报

​​​​​​​