mecanismo de pulsação do websocket

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

Acho que você gosta

Origin blog.csdn.net/weixin_48329823/article/details/130250309
Recomendado
Clasificación