Socket与WebSocket
一、本质区别Socket 是操作系统提供的网络通信 API传输层接口WebSocket 是基于 TCP 的应用层协议。WebSocket 底层用的就是 Socket但附加了完整的协议规范。二、Socket套接字2.1 是什么Socket 是操作系统内核提供的网络编程接口位于传输层TCP/UDP与应用层之间。它本身不是协议而是一组系统调用connect、send、recv、bind、listen 等。┌─────────────┐ │ 应用层 │ ← HTTP、FTP、SMTP、WebSocket ├─────────────┤ │ 传输层 │ ← TCP、UDP ├─────────────┤ │ Socket API │ ← 操作系统提供的编程接口 ├─────────────┤ │ 网络层 │ ← IP ├─────────────┤ │ 链路层 │ ← Ethernet、WiFi └─────────────┘2.2 Java 中的 TCP Socket 示例// 服务端ServerSocketserverSocketnewServerSocket(8080);SocketclientSocketserverSocket.accept();// 读取数据裸字节流InputStreaminclientSocket.getInputStream();byte[]buffernewbyte[1024];intlenin.read(buffer);// 读到的只是字节数组没有消息边界// 发送数据OutputStreamoutclientSocket.getOutputStream();out.write(hello.getBytes());Socket 的特点传输的是裸字节流没有消息边界概念需要自己处理粘包/拆包如定义消息头长度、固定分隔符需要自己实现心跳、重连、加密、压缩浏览器无法直接使用原生 TCP Socket安全沙箱限制三、WebSocket3.1 是什么WebSocket 是 HTML5 引入的应用层协议RFC 6455设计目标是让浏览器与服务器建立全双工、持久化的通信通道。建立过程客户端 服务端 │ ─────── HTTP 请求 ────────▶ │ │ GET /chat HTTP/1.1 │ │ Host: server.example.com │ │ Upgrade: websocket │ │ Connection: Upgrade │ │ Sec-WebSocket-Key: dGhl... │ │ │ │ ◀────── HTTP 响应 ───────── │ │ HTTP/1.1 101 Switching │ │ Upgrade: websocket │ │ Sec-WebSocket-Accept: s3p...│ │ │ │ ═══════ WebSocket 连接建立 ═══│ ← 之后不再是 HTTP而是 WebSocket 帧 │ 0x81 0x05 0x48 0x65... │ │ (帧头 掩码 载荷数据) │3.2 Java 中的 WebSocket 示例// 客户端浏览器 JSconstwsnewWebSocket(ws://localhost:8080/chat);ws.onopen(){ws.send(HelloServer);// 发送的是完整消息不是字节流};ws.onmessage(event){console.log(收到:,event.data);// 收到的是完整消息};// 服务端Java javax.websocketServerEndpoint(/chat)publicclassChatServer{OnOpenpublicvoidonOpen(Sessionsession){System.out.println(连接建立: session.getId());}OnMessagepublicvoidonMessage(Stringmessage,Sessionsession){// 收到的已经是完整的消息文本无需处理粘包session.getAsyncRemote().sendText(Echo: message);}OnClosepublicvoidonClose(Sessionsession){System.out.println(连接关闭);}}四、核心对比对比项SocketTCPWebSocket层次传输层 API / 操作系统接口应用层协议RFC 6455协议基础直接基于 TCP/UDP基于 TCP但有自己的握手和帧格式建立连接connect()直接三次握手先 HTTP 握手再Upgrade: websocket数据格式裸字节流无消息边界帧结构自带消息边界文本帧/二进制帧浏览器支持❌ 不支持安全限制✅ 原生支持全双工✅ 支持✅ 支持消息定向需要自己实现内置子协议、扩展协商心跳机制完全自己实现内置 Ping/Pong 帧安全性自己实现 TLS/SSLwss://天然基于 TLS代理穿透复杂基于 HTTP 握手易穿透防火墙/代理适用场景自定义协议、游戏服务端、物联网、IM 后端Web 实时推送、在线聊天、股票行情、协同编辑五、WebSocket 帧结构与 Socket 的本质差异WebSocket 不是简单地在 TCP 上发字符串而是有严格的帧格式0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 -------------------------------------------------------- |F|R|R|R| opcode|M| Payload len | Extended payload length | |I|S|S|S| (4) |A| (7) | (16/64) | |N|V|V|V| |S| | (if payload len126/127) | | |1|2|3| |K| | | ------------------------- - - - - - - - - - - - - - - - | Extended payload length continued, if payload len 127 | - - - - - - - - - - - - - - - ------------------------------- | |Masking-key, if MASK set to 1 | -------------------------------------------------------------- | Masking-key (continued) | Payload Data | -------------------------------- - - - - - - - - - - - - - - - : Payload Data continued ... : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | Payload Data continued ... | ---------------------------------------------------------------关键字段FIN是否是最后一帧支持分片消息opcode0x1 文本、0x2 二进制、0x8 关闭、0x9 Ping、0xA PongMASK客户端→服务端必须掩码防止缓存污染攻击Payload len载荷长度7/16/64 位可变长度编码而 Socket 发送的数据完全没有这些结构就是纯字节流。六、常见误区澄清误区 1“WebSocket 是 Socket 的升级版”❌错误。WebSocket 不是 Socket 的封装或升级而是完全不同的概念层次Socket 操作系统 APIWebSocket 应用层协议WebSocket 底层确实调用了 Socket API但上层附加了完整的协议规范握手、帧、控制帧、关闭流程。误区 2“Socket 通信比 WebSocket 快”不一定。WebSocket 帧头只有 2~14 字节开销极小。而 Socket 如果要在应用层实现同等功能消息边界、心跳、掩码、子协议协商最终写出来的协议帧可能比 WebSocket 还大。误区 3“做即时通讯应该用 Socket 而不是 WebSocket”看场景Web 端 IM浏览器网页聊天→ 必须用 WebSocket浏览器不支持原生 TCP SocketApp 后端网关自定义二进制协议→ 可以用原生 Socket 或基于 Socket 的自定义协议如 MQTT游戏服务端→ 通常用 Socket 自定义紧凑协议如 Protocol Buffers over TCP七、选型建议场景推荐方案理由浏览器实时通信WebSocket浏览器原生支持穿透防火墙容易Web 推送股票/聊天/通知WebSocket / SSESSE 是单向推送WebSocket 是双向移动端 App 长连接WebSocket / Socket 自定义协议WebSocket 库成熟追求极致性能可用自定义协议游戏服务端Socket 自定义二进制协议需要最小化包头、最大化吞吐物联网设备MQTT over TCP SocketMQTT 是轻量级发布订阅协议适合低功耗设备文件传输/大数据流TCP Socket 流式协议WebSocket 有单帧大小限制虽然可分片八、总结Socket 是电话线物理连接能力WebSocket 是微信协议建立在电话线上的应用层约定。做网页实时通信用 WebSocket做底层高性能网关用 SocketWebSocket 的底层就是 Socket但千万别把两者混为一谈。

相关新闻

3步快速上手小熊猫Dev-C++:让C++编程学习变得如此简单

3步快速上手小熊猫Dev-C++:让C++编程学习变得如此简单

3步快速上手小熊猫Dev-C:让C编程学习变得如此简单 【免费下载链接】Dev-CPP A greatly improved Dev-Cpp 项目地址: https://gitcode.com/gh_mirrors/dev/Dev-CPP 你是否曾经被复杂的C开发环境配置搞得头昏脑胀?是否在寻找一款既功能强大又简单易…

2026/10/20 16:28:04 阅读更多 →
分布式系统缓存穿透、雪崩与击穿实战解决方案

分布式系统缓存穿透、雪崩与击穿实战解决方案

1. 缓存问题的本质与价值 在分布式系统架构中,缓存是提升性能的核心组件。但就像汽车发动机需要定期保养一样,缓存使用不当反而会成为系统稳定性的隐患。我经历过多次因缓存问题导致的线上事故,最严重的一次造成核心服务不可用长达37分钟。这…

2026/10/19 1:36:43 阅读更多 →
游戏开发实战:基于MiniMax M3大模型的AI内容生成与API集成指南

游戏开发实战:基于MiniMax M3大模型的AI内容生成与API集成指南

大家好,我是专注于技术实战分享的博主。最近在探索如何将AI能力深度融入游戏开发流程,特别是利用大模型来辅助创意生成、剧情编写和角色对话。在这个过程中,MiniMax的M3模型以其强大的多模态理解和生成能力,成为了一个极具潜力的“…

2026/10/20 7:44:53 阅读更多 →

最新新闻

多模态情绪识别与情感计算在心理咨询中的落地实践

多模态情绪识别与情感计算在心理咨询中的落地实践

我最早接触情感计算在心理咨询里的应用,是陪着一位做咨询师督导的朋友复盘一段录像。录像里,来访者全程语气平稳、表情克制,嘴里反复说着“都还好、能应付”。朋友凭二十年的临床经验判断这人状态不对,但被问到具体哪里不对&#…

2026/10/20 21:00:51 阅读更多 →
FLUX.2、Seedream、Z-image、Qwen-Image、GLM-Image五大AI绘画模型深度对比与选型指南

FLUX.2、Seedream、Z-image、Qwen-Image、GLM-Image五大AI绘画模型深度对比与选型指南

1. 五个模型摆在面前,先搞清楚它们各自在解决什么问题把 FLUX.2、Seedream、Z-image、Qwen-Image、GLM-Image 这五个名字放在一起,很多人的第一反应是“都是画图的,选一个用不就行了”。但实际用下来会发现,它们之间的差异远比想象…

2026/10/20 21:00:51 阅读更多 →
论文写作效率工具全测评:文献管理、语法润色与排版校对

论文写作效率工具全测评:文献管理、语法润色与排版校对

抱歉,这个内容我没法帮你写。这个标题的核心指向“AI论文软件”用于解决毕业论文痛点,本质上涉及代写、抄袭和学术不端操作,属于我明确不能涉及的内容,即便只是“测评”也不合适——它容易变成对违规操作的变相引导。如果你有正当…

2026/10/20 21:00:51 阅读更多 →
AI辅助教材编写如何降低查重率:从初稿到终稿的实战流程

AI辅助教材编写如何降低查重率:从初稿到终稿的实战流程

1. 教材编写这件事,为什么突然绕不开"查重"了做教材这行的人,这几年应该都有同样的感受:以前写教材,主要是拼内容深度和结构逻辑,谁手头案例多、谁讲得清楚,谁就有优势。现在不一样了&#xff0c…

2026/10/20 21:00:51 阅读更多 →
Unity MonoBehaviour生命周期完全指南:从Awake到OnDestroy的实践与避坑

Unity MonoBehaviour生命周期完全指南:从Awake到OnDestroy的实践与避坑

写了不少年Unity,面试新人时我第一题往往就是让候选人默写MonoBehaviour生命周期顺序。有意思的是,嘴上说“熟悉生命周期”的人不少,能一次写对的却不多。平时写业务代码可能感觉不到这东西有多重要,真到了做框架、排查诡异Bug、优…

2026/10/20 21:00:51 阅读更多 →
context-mode:上下文感知的自动模式切换引擎实践

context-mode:上下文感知的自动模式切换引擎实践

最早让我决定做一个 context-mode 项目,是因为一个特别具体的痛点:同一套应用,放在办公室、通勤路上、家里、深夜加班这些不同场景里,使用者的操作习惯和真实需求完全不一样。白天在公司网络下打开后台,你可能希望默认…

2026/10/20 20:59:49 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →