总结
- Socket 和 WebSocket 没有直接关系,但它们都用于实现网络通信。
Socket
是对 TCP/IP 协议的封装,提供了底层的网络通信能力。在 Node.js 中可以通过内置模块net
或socket
来操作 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 设计的一种高级通信协议,简化了浏览器与服务器之间的双向通信。