WebSocket 是一种基于 TCP 的全双工通信协议,允许客户端和服务器之间建立持久化连接,实现实时双向数据传输。以下是 WebSocket 的核心使用方法和实践要点:
1. WebSocket 基本用法
客户端(浏览器)实现
- 创建连接:通过
WebSocket构造函数建立连接,支持ws(非加密)和wss(加密)协议。javascriptconst socket = new WebSocket('wss://example.com/ws'); - 事件监听:
onopen:连接建立时触发。onmessage:接收服务器消息时触发,数据可通过event.data获取。onclose:连接关闭时触发。onerror:发生错误时触发。
javascriptsocket.onmessage = (event) => { console.log('收到消息:', event.data); }; - 发送数据:支持文本、JSON 或二进制数据。
javascript
socket.send(JSON.stringify({ type: 'chat', content: 'Hello' })); - 关闭连接:
javascript
socket.close(1000, '正常关闭');
服务器端实现
- Node.js 示例(使用
ws库):javascriptconst WebSocket = require('ws'); const wss = new WebSocket.Server({ port: 8080 }); wss.on('connection', (ws) => { ws.on('message', (message) => { console.log('收到客户端消息:', message); ws.send('服务器回复: ' + message); }); }); - Java(Spring Boot):
java
@ServerEndpoint("/chat") public class ChatEndpoint { @OnOpen public void onOpen(Session session) { System.out.println("连接建立"); } @OnMessage public void onMessage(String message, Session session) { session.getAsyncRemote().sendText("回复: " + message); } }
2. 关键特性与优化
实时性与双向通信
- WebSocket 允许服务器主动推送数据,无需客户端轮询,适合聊天室、股票行情等场景115。
- 心跳机制:通过定时发送
Ping/Pong帧检测连接存活,避免超时断开913。javascript// 客户端心跳示例 setInterval(() => { if (socket.readyState === WebSocket.OPEN) { socket.send('Ping'); } }, 30000);
性能优化
安全注意事项
3. 常见问题解决
- 连接失败:检查协议(
ws/wss)、端口和防火墙设置1024。 - 消息乱码:明确数据格式(文本或二进制),设置
binaryType属性14。 - 兼容性:旧浏览器(如 IE 10+)需降级为长轮询(如 Socket.IO)1218。
4. 应用场景
5. 调试工具推荐
通过上述方法,可以高效利用 WebSocket 构建实时应用。具体实现需根据技术栈(如 Node.js、Java、Python)选择对应库(如 ws、Spring WebSocket、websockets)2412。
