18. socket 和 webSocket 的关系

发布于:2025-07-16 ⋅ 阅读:(20) ⋅ 点赞:(0)

总结

  • SocketWebSocket 没有直接关系,但它们都用于实现网络通信。
  • Socket 是对 TCP/IP 协议的封装,提供了底层的网络通信能力。在 Node.js 中可以通过内置模块 netsocket 来操作 TCP 层。

Socket 简介

定义

Socket 是网络通信的基本操作单元,它允许不同主机上的应用程序通过 TCP/IP 或 UDP/IP 协议进行数据交换。

特点

  • 基于 TCP 或 UDP。
  • 提供底层网络通信接口。
  • 支持多种协议,如 IPv4、IPv6。
  • 可用于客户端与服务器端开发。

示例代码(Node.js 使用 net 模块)

服务端
const net = require("net");

const server = net.createServer((socket) => {
  console.log("Client connected");
  socket.on("data", (data) => {
    console.log(`Received: ${data}`);
    socket.write(`Echo: ${data}`);
  });
  socket.on("end", () => {
    console.log("Client disconnected");
  });
});

server.listen(8080, () => {
  console.log("Server listening on port 8080");
});
客户端
const net = require("net");

const client = new net.Socket();
client.connect(8080, "localhost", () => {
  console.log("Connected to server");
  client.write("Hello Server!");
});

client.on("data", (data) => {
  console.log(`Server response: ${data}`);
  client.destroy(); // 关闭连接
});

WebSocket 简介

定义

WebSocket 是一种基于 TCP 的网络协议,提供全双工通信通道,允许服务器主动向客户端发送消息。

特点

  • 建立在 HTTP 协议之上(握手阶段),之后切换为 WebSocket 协议。
  • 默认端口:ws://(非加密,端口 80)、wss://(加密,端口 443)。
  • 支持跨域通信。
  • 适用于实时通信场景(聊天、在线协作等)。

示例代码(浏览器 + Node.js ws 库)

客户端(浏览器)
const socket = new WebSocket("ws://localhost:8080");

socket.addEventListener("open", () => {
  socket.send("Hello from client");
});

socket.addEventListener("message", (event) => {
  console.log("Received:", event.data);
});
服务端(Node.js 使用 ws 模块)
const WebSocket = require("ws");
const wss = new WebSocket.Server({ port: 8080 });

wss.on("connection", (ws) => {
  ws.on("message", (message) => {
    console.log(`Received: ${message}`);
    ws.send(`Echo: ${message}`);
  });
});

Socket 与 WebSocket 的区别

对比项 Socket WebSocket
协议层级 底层 TCP/IP 应用层协议(基于 TCP)
通信方式 全双工(TCP) 全双工
跨域支持 不适用(通常用于后端间通信) 支持
握手机制 有(HTTP 握手升级到 WebSocket)
传输格式 字节流 文本或二进制数据
适用场景 高性能、低延迟的底层通信 Web 实时通信(聊天、推送等)

总结对比

  • Socket 是操作系统层面提供的网络通信接口,常用于构建自定义协议。
  • WebSocket 是专门为 Web 设计的一种高级通信协议,简化了浏览器与服务器之间的双向通信。


网站公告

今日签到

点亮在社区的每一天
去签到