一、Socket(网络套接字)

什么是Socket?

Socket是操作系统提供的网络通信抽象层,可以理解为网络世界的"电话插座"。属于传输层

生活类比:

  • 你家公司有一个固定电话(ServerSocket)

  • 客户给你打电话时,电话会响,你接听(accept)

  • 然后你们开始通话(建立连接)

// 服务器端:创建一个"电话插座"
ServerSocket serverSocket = new ServerSocket(8080);
// 等待客户连接(有人打电话进来)
Socket socket = serverSocket.accept();
// 获取输入流,读取客户说的话
InputStream in = socket.getInputStream();
// 获取输出流,向客户说话
OutputStream out = socket.getOutputStream();
// 客户端:给公司打电话
Socket socket = new Socket("localhost", 8080);
二、WebSocket

什么是WebSocket?

WebSocket是HTML5提出的一个协议,基于HTTP,但建立了持久化的双向通信。属于应用层

为什么需要WebSocket?

HTTP的缺点:

  • 只能客户端发请求→服务器响应

  • 服务器不能主动给客户端发消息

  • 每次请求都要"握手"(建立连接→传输→断开) 生活类比:

  • HTTP = 你给客服打电话,每次说话都要重新拨号

  • WebSocket = 客服热线,一直保持连接,可以随时互相说话

WebSocket的建立过程

  1. 客户端发送请求(带有特殊的Header): GET /chat HTTP/1.1 Upgrade: websocket Connection: Upgrade ...

  2. 服务器同意升级: HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade

  3. 连接建立,双方可以随时发送消息!

三、Socket vs WebSocket 对比
特性 Socket WebSocket
协议层次 传输层 应用层
协议 TCP协议 WebSocket协议
连接方式 原始TCP/UDP连接 HTTP协议升级
协议开销 中等(有协议头)
双向通信 ✓ 支持 ✓ 支持
浏览器支持/HHTP兼容 ✗ 不支持 ✓ 原生支持
安全性 需自行实现 支持WSS(WebSocket Secure)
消息分帧 需自行处理 协议自动处理
适用场景 系统级通信 Web实时应用
复杂度 较低 较高
四、图解通信流程

Socket通信

HTTP通信(传统)

WebSocket通信

五、实际使用场景

用Socket的场景

  • Java后端之间的通信

  • 连接MySQL、Redis数据库

  • 消息队列(RabbitMQ、Kafka)

用WebSocket的场景

  • 实时聊天(微信网页版、客服系统)

  • 股票行情(实时价格推送)

  • 在线游戏(玩家操作实时同步)

  • 协同编辑(多人同时编辑文档)

六、一句话总结
概念 定义
Socket 操作系统的TCP接口,底层网络通信基础
WebSocket 基于HTTP升级的协议,实现服务器主动推送

关系: WebSocket底层也是用Socket实现的,但做了协议封装,使用更简单。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐