javascript - 如何在 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 请求吗?这应该在服务器端单独实现吗?
注意:对不起我的英语。
解决方案
此时,心跳通常是在服务器端实现的:你可以从客户端做的不多。
但是,如果服务器不断终止您的套接字连接,而您无法控制它,则客户端可能会定期向 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();
我强烈建议尝试理清服务器端发生的事情,而不是尝试在客户端解决它。
推荐阅读
- python-3.x - 从 TF 数据集写入 tfrecords 文件
- swift - swift circle 不规则层
- protractor - 如何通过量角器将xml文件转换为excel。任何想法?
- c# - Windows 10 上的 RabbitMQ
- ruby - 转义 Ruby CSV 中的特定字符
- css - 动画播放状态暂停不工作即
- r - pam 无法访问在函数中创建的变量
- python - selenium.common.exceptions.WebDriverException:消息:未知错误:Chrome 无法启动:在 Python 中使用 ChromeDriver 和 Selenium 崩溃
- pandas - 如何在熊猫中相互替换多列
- python - 为什么 MFCC 提取库返回不同的值?