Plantre Plantre
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

plantre

一个后端开发者
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 计算机组成原理

  • 操作系统

  • 计算机网络

    • localhost和127.0.0.1的区别
    • udp端口和tcp端口可以相同吗
    • 子网掩码是什么
    • ip地址的分类
    • AB​​C类私有地址各有多少网络和主机
    • 网线的速度是光速吗
    • 网线的种类和速度
    • TCP的ESTABLISHED是什么意思
    • NAT分类
    • 按转发行为分类和按转换方式之间有什么关系
    • 有socket为什么还用websocket
    • 设计模式

    • Java

    • Spring

    • SpringCloud

    • MySQL

    • Redis

    • 分布式

    • Zookeeper

    • Dubbo

    • Kafka

    • 数据结构

    • 算法

    • OJ

    • 从道家哲学看计算机?
    • 后端
    • 计算机网络
    plantre
    2025-06-19
    目录

    有socket为什么还用websocket

    这是一个经典的技术选型问题。虽然Socket提供了最底层的网络通信能力,但WebSocket的出现专门解决了Web环境中的实时通信痛点。以下是关键差异和WebSocket的独特价值:


    # ⚙️ 一、本质定位不同

    1. Socket:通用网络通信的“管道”

      • 底层接口:是操作系统提供的TCP/UDP传输层抽象,开发者需自行实现协议解析、连接管理、错误处理等。
      • 灵活性高:支持任意协议(如自定义二进制协议),适合非Web场景(如游戏服务器、物联网设备通信)。
    2. WebSocket:专为Web设计的“实时通道”

      • 高层协议:基于HTTP握手升级(Upgrade: websocket),建立后通过单一TCP连接实现全双工通信。
      • 开箱即用:内置帧格式、心跳机制(Ping/Pong)、连接状态管理,无需开发者重复造轮子。

    # 🌐 二、WebSocket在Web环境的核心优势

    # 1. 解决HTTP实时通信的瓶颈

    • 传统HTTP问题:单向请求-响应模式,实时数据需轮询(高延迟)或长轮询(高开销)。
    • WebSocket方案:服务端可主动推送数据(如聊天消息、股票行情),避免客户端频繁请求。

    # 2. 浏览器兼容性与安全性

    • 浏览器原生支持:所有现代浏览器均内置WebSocket API,前端可直接调用。
    • 绕过防火墙限制:复用HTTP端口(80/443),企业防火墙通常放行,而原始Socket可能被拦截。

    # 3. 开发效率与标准化

    • 简化代码:前端只需监听onmessage事件,后端使用标准库(如Python的websockets、Node.js的ws)。
    • 协议标准化:数据以帧(Frame)传输,支持文本/二进制格式,避免自定义协议解析的复杂性。

    # ⚖️ 三、关键能力对比

    特性 Socket WebSocket
    通信方向 需自行实现全双工 原生支持全双工
    连接管理 手动维护连接状态、重连逻辑 自动心跳保活,内置重连机制
    头部开销 无固定头部(自定义协议) 每个帧仅2~14字节头部
    浏览器支持 无法直接使用(需插件/后端) 原生API
    适用场景 底层系统、高性能自定义协议 Web实时应用(聊天、监控)

    # 🚀 四、典型场景:为何WebSocket更合适?

    1. 在线聊天应用💬
      • WebSocket保持长连接,消息即时到达;若用Socket,需自行实现消息队列、用户状态同步等复杂逻辑。
    2. 实时数据大屏📊
      • 服务器主动推送数据更新(如股票行情),避免HTTP轮询的资源浪费。
    3. 多人在线游戏🎮
      • 玩家动作同步需毫秒级延迟,WebSocket的单一连接双向通信比HTTP高效。

    # ⚠️ 五、何时仍需要Socket?

    1. 非Web环境:如C++后台服务、嵌入式设备通信,直接操作Socket更灵活高效。
    2. 特殊协议需求:需自定义二进制协议(如视频流传输)、UDP广播等场景。

    # 💎 总结

    🔧 Socket是“瑞士军刀”:强大灵活,但需深厚功底才能用好;
    🚀 WebSocket是“专用工具”:为Web实时场景而生,省时省力且安全可靠。

    在Web开发中优先选择WebSocket,可显著降低复杂度并提升性能;而底层系统、高性能定制场景中,Socket仍是不可替代的基石。

    编辑 (opens new window)
    上次更新: 2025/06/24, 00:41:57
    按转发行为分类和按转换方式之间有什么关系
    stream

    ← 按转发行为分类和按转换方式之间有什么关系 stream→

    最近更新
    01
    集成loki
    07-04
    02
    TCP的ESTABLISHED是什么意思
    06-24
    03
    安装1panel
    06-24
    更多文章>
    Theme by Vdoing | Copyright © 2025-2025 plantre | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式