JavaScript实时通信核心是WebSocket或Socket.io:前者为原生全双工协议,需手动处理连接状态;后者自动降级、重连并支持房间广播,更适生产环境,且需前后端协同实现鉴权、消息格式统一等。
用 JavaScript 实现实时通信,核心是建立客户端与服务器之间的双向、低延迟连接。WebSockets 是浏览器原生支持的协议,适合基础实时场景;Socket.io 则在 WebSocket 基础上封装了自动降级、重连、房间管理等能力,更适合生产环境。
WebSocket 是 HTML5 提供的全双工通信协议,需服务端配合(如 Node.js 的 ws 库)。浏览器中只需实例化 WebSocket 对象:
const ws = new WebSocket('ws://localhost:8080');
ws.onmessage = (event) => console.log('收到:', event.data);
ws.send(JSON.stringify({ type: 'chat', text: 'Hello' }));
onopen、onerror、onclose 状态,避免未连接时调用 send()
Socket.io 自动选择最佳传输方式(WebSocket → HTTP 长轮询),并内置心跳、断线重连和命名空间支持。前后端需同时引入:
npm install socket.io,搭配 http 服务器启动 io 实例(路径由服务端自动提供)socket.emit() 发送事件,socket.on() 监听事件,如 socket.emit('joinRoom', 'room-123')
io.to('room-123').emit('message', data) 向指定房间广播,比手动管理连接更简洁真实项目中不能只依赖“连上了就一直通”。关键点包括:
auth 选项传 token,服务端在 connection 事件中验证 JWT 或 session{ reconnection: true, reconnectionAttempts: 5 };服务端监听 disconnect 做清理服务端(index.js):
const io = require('socket.io')(3000);
) => {客户端(HTML):
const socket = io();