Socket vs WebSocket

三个字母,本质上差了一整层协议栈

层级 Socket WebSocket
所属层级 传输层(TCP/UDP) 应用层(HTTP之上)
连接方式 直接建立 TCP/UDP 连接 先通过 HTTP 握手,再升级为 WebSocket 连接
数据格式 二进制字节流 帧(Frame)结构,可是文本帧/二进制帧
通信方向 默认是双向(TCP流) 真正的全双工通信,浏览器可直接收发
典型端口 TCP: 80/443/任意 ws:// 用80,wss:// 用443
使用场景 程序间通信、嵌入式、底层传输 浏览器实时通信(IM、推送、视频)

Socket 是"机制",WebSocket 是"协议"

1、Socket 是操作系统提供的 通信接口

它是"怎么通信"的底层通道。

举个例子:

复制代码
// TCP Socket
int fd = socket(AF_INET, SOCK_STREAM, 0);
connect(fd, ...);
send(fd, buf, len, 0);
recv(fd, buf, len, 0);

这只是两端程序之间的字节流,谁都可以定义内容(比如你定义 JSON 协议、自定义命令)。


2、WebSocket 是建立在 HTTP 上的一种 应用层协议

它定义了"浏览器如何与服务器保持长连接"的标准做法。

握手过程(HTTP 请求头):

复制代码
GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: ...

服务器响应:

复制代码
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: ...

握手成功后,HTTP连接升级为 WebSocket 通道(TCP 长连接),之后就可以实时收发数据。


⚙️ 三、关系图一看就懂

复制代码
浏览器 <---HTTP握手---> 服务器
           ↓ 升级
      <=== WebSocket 全双工通道 ===>

底层仍然是:
  TCP Socket → send()/recv()

也就是说:

WebSocket 本质上是用 HTTP 协商,然后在 TCP Socket 上跑自定义的帧格式。

场景 推荐协议 说明
C++ 程序 ↔ C++ 程序 原生 Socket (TCP/UDP) 性能高、自由度高
浏览器 ↔ 后端服务 WebSocket 兼容 Web 平台、可穿透防火墙
短期请求 HTTP/HTTPS 一次性通信(REST API)
长期实时通信 WebSocket 实时推送、消息同步
类比 Socket WebSocket
比喻 电话线路 打电话的"约定规则"
你负责 拨号、接通、收发电流 用标准话语通话
特点 自由、裸数据 标准化、跨平台

Socket 是通信的"工具"
WebSocket 是一种基于 Socket 的"通信协议"

专为浏览器实时通信设计。

相关推荐
YuMiao5 小时前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
Jony_3 天前
高可用移动网络连接
网络协议
chilix3 天前
Linux 跨网段路由转发配置
网络协议
DianSan_ERP5 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
呉師傅5 天前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑
gihigo19985 天前
基于TCP协议实现视频采集与通信
网络协议·tcp/ip·音视频
2501_946205525 天前
晶圆机器人双臂怎么选型?适配2-12寸晶圆的末端效应器有哪些?
服务器·网络·机器人
linux kernel5 天前
第七部分:高级IO
服务器·网络
数字护盾(和中)5 天前
BAS+ATT&CK:企业主动防御的黄金组合
服务器·网络·数据库
~远在太平洋~5 天前
Debian系统如何删除多余的kernel
linux·网络·debian