面试题答案
一键面试心跳机制原理
心跳机制是在WebSocket连接建立后,客户端定期向服务器发送一个特定的数据包(心跳包),服务器收到后会回复一个响应。通过这种方式,双方可以确认彼此之间的连接仍然有效,防止因网络故障、防火墙超时等原因导致连接被意外关闭。如果客户端在一定时间内没有收到服务器的响应,或者服务器在一定时间内没有收到客户端的心跳包,就可以认为连接出现问题并进行相应处理,比如尝试重新连接。
关键代码片段
// 创建WebSocket连接
const socket = new WebSocket('ws://your-server-url');
// 心跳包发送间隔时间(毫秒)
const HEARTBEAT_INTERVAL = 5000;
let heartbeatTimer;
// 连接成功时启动心跳
socket.onopen = function () {
function sendHeartbeat() {
socket.send('ping');
heartbeatTimer = setTimeout(sendHeartbeat, HEARTBEAT_INTERVAL);
}
sendHeartbeat();
};
// 收到服务器响应时重置心跳定时器
socket.onmessage = function (event) {
if (event.data === 'pong') {
clearTimeout(heartbeatTimer);
function sendHeartbeat() {
socket.send('ping');
heartbeatTimer = setTimeout(sendHeartbeat, HEARTBEAT_INTERVAL);
}
sendHeartbeat();
}
};
// 连接关闭时清除心跳定时器
socket.onclose = function () {
clearTimeout(heartbeatTimer);
};
心跳包发送频率设定考虑因素
- 网络状况:如果网络不稳定,心跳包频率应适当提高,以更及时地检测连接状态;而在稳定网络环境下,频率可以相对降低,减少不必要的网络流量。
- 服务器负载:过于频繁的心跳包会增加服务器的处理负担,应根据服务器的性能和承载能力来调整频率,避免因过多心跳包处理导致服务器性能下降。
- 业务需求:如果业务对连接的实时性要求极高,不允许长时间的连接中断,那么需要设置较高的心跳频率,确保连接始终处于活跃状态;反之,若业务对连接中断的容忍度较高,则可以适当降低频率。