首页 > 解决方案 > 如何在 javascript 中实现对 webSocket 连接的 Ping/Pong 请求?

问题描述

我在 javascript 中使用 websocket。但连接在一分钟后关闭。

我想知道一些事情:

1- Websocket 不是自然地提供不关闭连接的 Ping/Pong 消息吗?我认为它必须。否则websocket和TCP连接有什么区别?

2- 如果我必须发送 ping/pong 消息,如何发送 ping 消息?我需要做什么?WebSocket 对象是否提供 ping 方法?或者我应该将方法称为 websocket.send("ping") 吗?我在 javascipt 中使用 naturaly WebSocket 对象。

3- 服务器应该用 Pong 响应 Ping 请求吗?这应该在服务器端单独实现吗?

注意:对不起我的英语。

标签: javascriptwebwebsocketpingpong

解决方案


此时,心跳通常是在服务器端实现的:你可以从客户端做的不多。

但是,如果服务器不断终止您的套接字连接,而您无法控制它,则客户端可能会定期向 websocket 发送任意数据:

let socket = null;

function connect_socket() {
  socket = new WebSocket(ws_url);
  socket.on("close", connect_socket); // <- rise from your grave!
  heartbeat();
}

function heartbeat() {
  if (!socket) return;
  if (socket.readyState !== 1) return;
  socket.send("heartbeat");
  setTimeout(heartbeat, 500);
}

connect_socket();

我强烈建议尝试理清服务器端发生的事情,而不是尝试在客户端解决它。


推荐阅读