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 的"通信协议"

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

相关推荐
sadandbad3 小时前
[vulhub靶机通关]DC-2(rbash绕过_git提权)
网络·sql·web安全·网络安全
2501_915106323 小时前
App HTTPS 抓包 工程化排查与工具组合实战
网络协议·ios·小程序·https·uni-app·php·iphone
GTgiantech4 小时前
科普SFP 封装光模块教程
服务器·网络·数据库
0和1的舞者5 小时前
网络通信的奥秘:HTTP详解 (七)
服务器·网络·网络协议·http·okhttp·软件工程·1024程序员节
Ashlee_code5 小时前
BSS供应商:电信与金融领域的幕后支撑者
大数据·网络·金融·系统架构·跨境·金融机构·场外期权
节点小宝5 小时前
节点小宝免费版流量机制解析:点对点直连技术与备用流量设计
网络·网络协议·p2p
创业之路&下一个五年7 小时前
按照ip的转换为二进制的方式理解a\b\c类地址的边界
服务器·网络·tcp/ip
陌路207 小时前
Linux29初识网络:核心概念与分层逻辑
网络
huangdengji7 小时前
基于openresty反向代理、dns劫持、实现对http请求、响应内容抓包
网络协议·http·openresty