总结
- WebSocket 是 HTML5 引入的一种新协议,允许客户端和服务器之间进行双向实时通信。
- 建立在 TCP 协议之上,默认端口是
80
(ws) 和 443
(wss),没有同源限制,客户端可以与任意服务器通信。 ws://example.com/socket
表示非加密连接。wss://example.com/socket
表示加密连接(类似 HTTPS)。
特点
- 双向通信:不同于传统的 HTTP 请求-响应模式,WebSocket 允许服务器主动推送消息到客户端。
- 低延迟:一旦建立连接,数据可以直接传输,无需每次发送 HTTP 头部信息。
- 无同源限制:客户端可以与任意服务器通信,不受浏览器同源策略限制。
- 持久化连接:WebSocket 连接在整个会话期间保持打开状态。
使用场景
- 实时聊天应用(如微信、QQ)
- 在线协作工具(如 Google Docs)
- 实时数据更新(如股票行情、天气预报)
- 游戏开发(多人在线游戏)
示例代码
客户端(JavaScript)
const socket = new WebSocket("ws://example.com/socket");
socket.addEventListener("open", function (event) {socket.send("Hello Server!");
});
socket.addEventListener("message", function (event) {console.log("Message from server:", event.data);
});
服务器端(Node.js + ws 库)
const WebSocket = require("ws");
const wss = new WebSocket.Server({ port: 8080 });wss.on("connection", function connection(ws) {ws.on("message", function incoming(message) {console.log("received: %s", message);ws.send(`Echo: ${message}`);});
});
优势
- 减少不必要的 HTTP 请求,提高性能。
- 支持二进制和文本数据传输。
- 更简单的 API 接口,易于使用。
注意事项
- WebSocket 需要服务器端支持,不能直接使用普通 HTTP 服务器。
- 部分老旧浏览器可能不支持 WebSocket,需要降级处理或使用替代方案(如长轮询)。
参考资料
- MDN WebSocket 文档
- WebSocket 协议 RFC 6455