WebSocket é uma tecnologia que cria uma conexão persistente entre um cliente e um servidor. Para manter a estabilidade da conexão, é necessário manter a conexão WebSocket enviando mensagens heartbeat.
1. Crie um uso básico do websocket
// 创建 WebSocket 对象,传入服务器地址
const socket = new WebSocket('ws://url');
// 监听 WebSocket 的打开事件
socket.addEventListener('open', (event) => {
// 在此处理连接打开时的逻辑
});
// 监听 WebSocket 接收到消息的事件
socket.addEventListener('message', (event) => {
// 在此处理从服务器接收到的消息的逻辑
});
// 监听 WebSocket 关闭事件
socket.addEventListener('close', (event) => {
// 在此处理连接关闭时的逻辑
});
// 监听 WebSocket 发生错误的事件
socket.addEventListener('error', (event) => {
// 在此处理连接发生错误时的逻辑
});
// 向服务器发送消息
socket.send('Hello, server!');
2. Depois que o cliente se conecta ao servidor WebSocket, a mensagem de pulsação é enviada regularmente por meio do método setInterval
let ws = new WebSocket('ws://localhost:8080');
let heartCheck;
ws.onopen = function() {
heartCheck = setInterval(function() {
ws.send('HeartBeat');
}, 5000); // 发送心跳消息的时间间隔,单位毫秒
}
O código aqui enviará uma mensagem de heartbeat para o servidor a cada 5 segundos
3. Quando o cliente receber a mensagem enviada pelo servidor, limpe o cronômetro de pulsação. Porque se o servidor continuar enviando mensagens, não há necessidade de enviar mensagens de pulsação
let ws = new WebSocket('ws://url');
let heartCheck;
ws.onopen = function() {
heartCheck = setInterval(function() {
ws.send('HeartBeat');
}, 5000);
}
ws.onmessage = function() {
clearInterval(heartCheck);
heartCheck = setInterval(function() {
ws.send('HeartBeat');
}, 5000);
}
Quando o cliente recebe a mensagem enviada pelo servidor, o cronômetro de pulsação original é limpo e um cronômetro de pulsação é recriado para garantir o status da conexão do WebSocket.
4. Quando o cliente detectar que a conexão WebSocket está fechada, limpe o cronômetro de pulsação. Porque se a conexão WebSocket for fechada, o timer de pulsação não tem sentido
let ws = new WebSocket('ws://url');
let heartCheck;
ws.onopen = function() {
heartCheck = setInterval(function() {
ws.send('HeartBeat');
}, 5000);
}
ws.onmessage = function() {
clearInterval(heartCheck);
heartCheck = setInterval(function() {
ws.send('HeartBeat');
}, 5000);
}
ws.onclose = function() {
clearInterval(heartCheck);
}
O cronômetro de pulsação é limpo quando uma conexão WebSocket fechada é detectada