前端在基础业务逻辑外,根据具体的业务需求还可以实现更复杂的交互逻辑,如:
连接建立:
onopen
事件处理程序。消息收发:
onmessage
事件处理程序。错误处理:
onerror
事件处理程序。连接关闭:
onclose
事件处理程序。断线重连:
onclose
事件处理程序中实现重新连接逻辑,例如等待一定时间后再次尝试连接服务器。心跳保持:
// 创建 WebSocket 连接
const socket = new WebSocket('ws://example.com/socket');
// 连接成功时触发
socket.onopen = function(event) {
console.log('WebSocket 连接已建立');
// 发送消息到服务器
socket.send('Hello, server!');
};
// 接收到服务器发送的消息时触发
socket.onmessage = function(event) {
const message = event.data;
console.log('收到消息:', message);
// 关闭 WebSocket 连接
socket.close();
};
// 连接关闭时触发
socket.onclose = function(event) {
console.log('WebSocket 连接已关闭');
};
// 连接发生错误时触发
socket.onerror = function(error) {
console.error('WebSocket 错误:', error);
};
首先通过 new WebSocket(url)
创建了 WebSocket 对象,并指定要连接的服务器地址。然后,通过设置 WebSocket 对象的各种事件处理程序来处理不同的事件,例如 onopen
处理连接成功、onmessage
处理接收消息、onclose
处理连接关闭等。在 onopen
处理程序中,可以使用 send()
方法向服务器发送消息。而在 onmessage
处理程序中,可以通过 event.data
获取服务器发送的消息内容。
需要根据实际情况将 ws://example.com/socket
替换为实际的 WebSocket 服务器地址。通常,后端会提供一个 WebSocket 服务器供前端连接。
另外,需要注意的是,WebSocket 连接是异步的,并且在浏览器中只能与支持 WebSocket 协议的服务器进行连接。在开发过程中,可以使用 localhost
或部署在本地的服务器进行测试。
在前端实现 WebSocket 的心跳监听,可以使用定时器定期发送心跳消息来保持连接的活跃状态。以下是一个示例代码:
// 创建 WebSocket 连接
const socket = new WebSocket('ws://example.com/socket');
// 心跳相关变量
let heartbeatTimer = null;
const heartbeatInterval = 30000; // 心跳间隔时间,单位为毫秒
// 连接成功时触发
socket.onopen = function(event) {
console.log('WebSocket 连接已建立');
// 开始发送心跳消息
startHeartbeat();
};
// 接收到服务器发送的消息时触发
socket.onmessage = function(event) {
const message = event.data;
console.log('收到消息:', message);
// 处理接收到的消息
// 重置心跳计时器
resetHeartbeat();
};
// 连接关闭时触发
socket.onclose = function(event) {
console.log('WebSocket 连接已关闭');
// 停止心跳计时器
stopHeartbeat();
};
// 连接发生错误时触发
socket.onerror = function(error) {
console.error('WebSocket 错误:', error);
// 停止心跳计时器
stopHeartbeat();
};
// 发送心跳消息
function sendHeartbeat() {
socket.send('heartbeat'); // 发送心跳消息
}
// 开始心跳
function startHeartbeat() {
heartbeatTimer = setInterval(sendHeartbeat, heartbeatInterval);
}
// 重置心跳计时器
function resetHeartbeat() {
clearInterval(heartbeatTimer); // 清除旧的计时器
heartbeatTimer = setInterval(sendHeartbeat, heartbeatInterval); // 开启新的计时器
}
// 停止心跳
function stopHeartbeat() {
clearInterval(heartbeatTimer);
}
我们创建了一个名为 heartbeatTimer 的定时器变量,并设置了心跳间隔时间为 30 秒(30000 毫秒)。在连接成功建立时,会调用 startHeartbeat() 函数开始发送心跳消息,并在接收到服务器发送的消息时调用 resetHeartbeat() 函数来重置心跳计时器。当连接关闭或发生错误时,会调用 stopHeartbeat() 函数停止心跳计时器。
通过以上实现,定时器会定期调用 sendHeartbeat() 函数发送心跳消息给服务器,以保持连接的活跃状态。每次收到服务器发送的消息时,都会重置心跳计时器,确保连接不会因为长时间无数据传输而断开。