html5提供了原生的websocket API,开发者可以直接通过该API实现客户端与服务器的双向实时通信,不需要再依赖轮询等低效的方案。这种方式延迟更低,资源消耗也更小,非常适合即时聊天、实时数据推送等场景。

websocket基础原理
websocket是基于TCP的全双工通信协议,建立连接时会先通过http协议进行握手,握手成功后就升级为websocket连接,之后客户端和服务器就可以随时互相发送数据。和传统的http请求不同,websocket连接建立后会一直保持,直到主动关闭。
前端html5整合websocket实现
1. 创建websocket连接
html5的window对象下自带WebSocket构造函数,直接传入服务器地址就可以创建连接,地址前缀是ws或者wss,wss是加密的websocket连接,类似https。
// 创建websocket连接,这里使用本地测试地址
const socket = new WebSocket('ws://127.0.0.1:8080/ws');
// 连接建立成功的回调
socket.onopen = function() {
console.log('websocket连接已建立');
// 连接建立后发送一条测试消息
socket.send('客户端连接成功');
};
// 接收服务器消息的回调
socket.onmessage = function(event) {
console.log('收到服务器消息:', event.data);
};
// 连接关闭的回调
socket.onclose = function() {
console.log('websocket连接已关闭');
};
// 连接出错的回调
socket.onerror = function(error) {
console.log('websocket连接出错:', error);
};
2. 消息发送与接收处理
实际开发中一般会约定统一的消息格式,比如使用JSON格式传输,方便区分消息类型和内容。下面是实现消息格式封装的示例:
// 封装消息发送方法
function sendMessage(type, content) {
const message = {
type: type,
content: content,
timestamp: Date.now()
};
// 将对象转为JSON字符串发送
socket.send(JSON.stringify(message));
}
// 处理接收到的消息
socket.onmessage = function(event) {
try {
const message = JSON.parse(event.data);
switch(message.type) {
case 'chat':
// 处理聊天消息
console.log('收到聊天消息:', message.content);
break;
case 'notice':
// 处理通知消息
console.log('收到通知:', message.content);
break;
default:
console.log('未知类型消息:', message);
}
} catch(e) {
console.log('消息解析失败:', e);
}
};
后端实现示例(Node.js)
后端可以使用ws库快速搭建websocket服务器,以下是简单的实现代码:
const WebSocket = require('ws');
// 创建websocket服务器,监听8080端口
const wss = new WebSocket.Server({ port: 8080 });
// 存储所有连接的客户端
const clients = new Set();
// 监听连接事件
wss.on('connection', function connection(ws) {
// 将新连接加入客户端集合
clients.add(ws);
console.log('有新客户端连接,当前连接数:', clients.size);
// 接收客户端消息
ws.on('message', function message(data) {
console.log('收到客户端消息:', data.toString());
// 广播消息给所有连接的客户端
clients.forEach(function each(client) {
if (client.readyState === WebSocket.OPEN) {
client.send(data.toString());
}
});
});
// 连接关闭时从集合中移除
ws.on('close', function() {
clients.delete(ws);
console.log('客户端断开连接,当前连接数:', clients.size);
});
});
console.log('websocket服务器已启动,监听端口8080');
实时通信接入注意事项
- 连接稳定性处理:需要实现重连机制,当连接意外断开时,间隔一段时间尝试重新连接,避免实时通信中断。
- 消息可靠性:重要消息可以增加确认机制,发送后等待服务器返回确认响应,未收到确认则重新发送。
- 连接管理:服务器需要定期清理无效连接,避免占用过多资源,客户端也需要监听连接状态,及时处理异常。
- 安全性:生产环境建议使用wss加密连接,同时对消息内容进行校验,避免传输敏感信息或者恶意内容。
常见实时通信场景汇总
| 场景 | 实现要点 |
|---|---|
| 即时聊天 | 需要维护用户在线状态,消息需要持久化存储,支持离线消息推送 |
| 实时数据推送 | 比如股票行情、物联网设备数据,需要控制推送频率,避免数据冗余 |
| 协同编辑 | 需要处理操作冲突,保证多端数据一致性,通常需要结合操作转换算法 |
| 在线游戏 | 对延迟要求高,需要优化消息传输格式,减少冗余数据,同时做好状态同步 |
html5websocket实时通信javascript修改时间:2026-06-27 03:39:27