指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub

关于socket

1. Socket 本身是什么?

  • Socket 不是协议,而是一种 编程接口(API),提供应用程序和网络协议栈交互的接口。

  • 作用:让应用程序可以发送/接收数据,而不用关心底层的传输细节。

  • 常用类型:

    1. TCP Socket → 面向连接、可靠传输
    2. UDP Socket → 无连接、快速传输

2. Socket 与应用层协议的关系

  • Socket 是载体,可以承载不同应用层协议:

    • HTTP(浏览器请求)
    • WebSocket(实时消息)
    • MySQL 协议(数据库访问)
    • 自定义二进制协议(游戏、IoT)
  • 所以 Socket 本身不是应用层协议,只是应用层协议和传输层之间的桥梁。

3. Socket 的传输层依赖

  • TCP Socket → 基于 TCP 传输层

    • 保证数据可靠、有序、完整
    • 三次握手、四次挥手
  • UDP Socket → 基于 UDP 传输层

    • 无连接、不保证可靠性
    • 适合实时性高、允许丢包的场景
  • 也就是说,Socket 的“底层”就是 TCP 或 UDP,而应用程序通过 Socket 使用它们。

4. 举例说明

应用层协议 / 场景Socket 类型传输层协议
HTTP/HTTPSTCP SocketTCP
WebSocketTCP SocketTCP
MySQL 客户端TCP SocketTCP
游戏实时数据UDP SocketUDP
DNS 查询UDP SocketUDP

✅ 总结

  1. Socket 不是协议,是应用程序访问网络的接口。它不管底层是 TCP 还是 UDP,都是应用程序和网络协议栈之间的桥梁。
  2. Socket 可以承载不同应用层协议(HTTP、WebSocket、MySQL、自定义协议等)。
  3. 底层传输依赖 TCP 或 UDP,决定数据可靠性和实时性。

之所以有这个 socket 问题是因为,过去总是说socket协议,其实不对,应该是WebSocket协议

很多人把 WebSocket 当成“Socket”,或者说“TCP 连接”,其实要区分清楚:

1. WebSocket 是应用层协议

  • WebSocket 定义了浏览器/客户端和服务器之间 双向通信的应用层协议

  • 它规定了:

    • 握手过程(HTTP Upgrade 请求)
    • 数据帧格式(文本帧、二进制帧、Ping/Pong)
    • 心跳和关闭流程
  • 也就是说,WebSocket 的语义、数据解析、帧边界 都属于应用层的东西。

2. WebSocket 和 TCP 的关系

  • WebSocket 并不是独立的传输协议,它是 运行在 TCP 之上的应用层协议

  • TCP 提供:

    • 可靠传输
    • 有序、完整、重传
  • WebSocket 只关心 消息的格式、双向通信语义,不关心数据包是否丢失或乱序

3. 连接示意

客户端应用(浏览器/JS)
        │
   WebSocket 协议(应用层)
        │
   TCP Socket(传输层)
        │
       IP/网络层
        │
   数据链路/物理层
  • TCP Socket = 应用程序调用接口
  • TCP = 传输层协议,保证可靠传输
  • WebSocket = 应用层协议,定义消息格式和通信语义

✅ 总结

  • WebSocket ≠ TCP
  • WebSocket 是应用层协议,依赖 TCP 提供底层可靠传输
  • “WebSocket 连接”这个说法,只是习惯说法,本质上是 TCP 连接 + WebSocket 协议握手 + 双向数据流

案例:基于Socket.js的实时监听响应

实时监听响应,就是客户端和服务器 建立一个长连接,然后服务器可以主动推送数据给客户端,这正是 Socket.js/WebSocket 的用途。

1. 核心原理

  • 传统 HTTP

    • 客户端发请求 → 服务器响应 → 连接关闭
    • 不适合实时通知,因为每次都要建立 TCP 连接,延迟高
  • Socket.js / WebSocket

    • 客户端发一次握手请求(HTTP Upgrade) → 建立 TCP 长连接
    • 服务器可以随时向客户端推送消息
    • 双向通信、实时性高
    • 底层仍然是 TCP Socket,WebSocket 协议在上面定义了消息格式

2. 实时监听流程示意

  1. 客户端用 socket.js 发起连接请求
  2. 服务端接收,完成 WebSocket 握手
  3. TCP 长连接建立
  4. 服务端可以 随时向客户端发送消息(例如聊天、通知、数据更新)
  5. 客户端监听 onmessage 回调,实时获取数据

3. 总结

  • socket.js / WebSocket = 应用层协议和 API
  • TCP Socket = 底层传输保证可靠
  • 实时监听响应 = 利用 WebSocket 在 TCP 长连接上实现的双向实时通信