讲师中心 微信公众号
AI工具推荐 视频效率加速

Workerman客户端心跳怎么发送

风婷同学_6884

风婷同学_6884

发布时间:2026-09-05 12:30:47

|

752人浏览过

|

来源于php中文网

原创

客户端WebSocket心跳需在onopen后用setInterval定时发送轻量数据(如"ping"或{"type":"ping"}),间隔≤45秒(推荐30秒),并配合超时检测与onclose清理,确保兼容中间设备且覆盖全连接生命周期。

workerman客户端心跳怎么发送

客户端 WebSocket 心跳怎么发?用 setInterval + ws.send() 就够了,但必须控制间隔和内容格式

Workerman 本身不干涉客户端行为,所以心跳发送完全由前端控制。最常见、最稳妥的方式是连接建立后立即启动一个定时器,按固定间隔发轻量数据包。关键不是“能不能发”,而是“发什么”和“什么时候发”。

常见错误现象:WebSocket is already in CLOSING or CLOSED stateFailed to execute 'send' on 'WebSocket': Still in CONNECTING state、心跳发了但服务端没响应、客户端误判断连反复重连。

  • 必须在 ws.onopen 回调里启动定时器,不能在 new WebSocket() 后立刻发 —— 此时连接可能还没真正就绪
  • 心跳内容建议用纯字符串或极简 JSON,例如 "ping"{"type":"ping"};避免带时间戳(如 ts)除非服务端真要校验,否则徒增解析负担
  • 间隔设为 ≤45 秒(推荐 30 秒),确保小于所有常见中间件超时(Nginx 默认 60s、运营商 NAT 普遍 60–90s)
  • 不要用 setTimeout 递归模拟定时器 —— 一旦某次发送失败或延迟,后续全乱套;必须用 setInterval 保证节奏稳定
const ws = new WebSocket('wss://api.example.com');
ws.onopen = () => {
  // 立即开始心跳,30 秒一次
  ws.heartbeat = setInterval(() => {
    if (ws.readyState === WebSocket.OPEN) {
      ws.send('ping');
    }
  }, 30000);
};
ws.onclose = () => {
  clearInterval(ws.heartbeat);
};

为什么不能只发空字符串或二进制 \x00

空字符串 '' 在部分浏览器或代理(尤其是旧版 Nginx)中可能被静默丢弃或截断;而裸二进制如 \x00 容易触发 WebSocket 协议层校验失败或被防火墙拦截。这不是 Workerman 的限制,而是跨网络链路的兼容性现实。

使用可读 ASCII 字符串(如 "ping")或标准 JSON(无嵌套、无多余空格)能最大程度通过各类中间设备。实测中,"p" 这种单字符也有效,但可读性和调试成本太低,不推荐。

  • 别用 ws.send(new ArrayBuffer(1)) —— 二进制帧需显式设置 binaryType,且服务端 onMessage 收到的是 string 还是 Buffer 取决于 Workerman 版本和 WebSocket 配置,极易出错
  • 如果服务端约定用前缀识别心跳(如 \x01ping),客户端必须用 Uint8Array 构造并确保编码一致,否则 onMessage 收到的是乱码
  • 移动端 WebView(尤其 Android 4.x–8.x)对非 UTF-8 字符串支持差,JSON 中避免 emoji 或中文字段名

前端怎么判断心跳是否失效?不能只看 onerror

onerror 是兜底事件,触发时连接往往已不可逆损坏;真正的心跳失效检测,得靠业务层超时机制:发完 ping 后启动一个独立计时器,等 pong,超时就主动 close 并重连。

很多项目只监听 onmessage 却不区分 ping/pong 和业务消息,导致 pong 响应被当普通数据处理,或根本没监听 —— 这会让客户端永远不知道服务端是否还活着。

  • 必须在 ws.onmessage 里做类型判断:if (event.data === 'pong' || (typeof event.data === 'string' && JSON.parse(event.data)?.type === 'pong'))
  • 每次发 ping 前清掉上一个等待定时器:clearTimeout(ws.pingTimeout),再 ws.pingTimeout = setTimeout(..., 60000)
  • 超时阈值建议设为心跳间隔的 2 倍(如 30s 心跳 → 60s 超时),容忍一次丢包或服务端短暂卡顿
  • 别在 onclose 里直接重连 —— 需先判断 event.code1006(abnormal closure)才该重连,1000(normal)说明是服务端主动下线

移动端弱网下心跳发不出怎么办?

4G 模组、车载终端、IoT 设备在信号边缘区常出现「TCP 连接看似建立成功,但首条 WebSocket 消息发不出去」的情况。此时前端定时器照常运行,但 ws.send() 实际失败且不抛异常 —— 你看到的只是静默丢包。

真正的难点不在发送逻辑,而在如何感知这种“假连接”。Workerman 服务端收不到 ping,自然会在 90 秒后清理,但客户端毫无察觉,还在傻等 pong。

  • 首次连接后,立即发一条带唯一 ID 的心跳(如 {"type":"ping","id":"cli_abc123"}),并在服务端 onMessage 中强制记录该 ID 到 Redis 或内存表;客户端启动一个 10 秒探测定时器,查这个 ID 是否被服务端登记 —— 没登记就说明首条消息丢了,立刻 close 重试
  • Android WebView 下,navigator.onLine 不可靠,优先用 fetch('/health') 检查 HTTP 层连通性,再建 WS
  • 别依赖 ws.bufferedAmount 判断发送状态 —— 它只反映浏览器内部缓冲区,不反映是否抵达服务端,且在弱网下长期 > 0
真正难的不是写那几行 setInterval,而是让心跳逻辑覆盖所有连接生命周期:从 onopen 启动、onmessage 响应、onclose 清理,再到弱网下的探测补救 —— 漏掉任一环,长连接就在你不知道的时候悄悄断了。

热门AI工具

更多
AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
Workerman安装配置教程
Workerman安装配置教程

Workerman安装配置教程专题提供Workerman安装配置、WebSocket开发、TCP通信、异步编程、高并发服务搭建与PHP实时通信开发教程。

146

2026.05.20

Workerman实时通信与长连接开发教程
Workerman实时通信与长连接开发教程

WWorkerman实时通信与长连接开发教程聚合实时通信、聊天室、长连接、消息推送、AI流式输出等Workerman高并发开发内容。

162

2026.05.20

Workerman异步通信与TCP服务器开发
Workerman异步通信与TCP服务器开发

Workerman异步通信与TCP服务器开发专题整理Workerman异步通信、TCP服务、HTTP服务、WebSocket开发与高并发PHP服务器教程。

127

2026.05.20

Aionclaw智能助手介绍
Aionclaw智能助手介绍

本专题汇总了AionClaw(AI龙虾助手)的功能介绍与在线使用入口。AionClaw是杭州趣猿人工智能有限公司推出的桌面级AI智能体,能直接在电脑上读写文件、运行脚本、操作浏览器,自动交付Word、PPT、Excel等成品。

20

2026.09.20

AionClaw AI智能体与电脑自动化任务执行功能使用教程
AionClaw AI智能体与电脑自动化任务执行功能使用教程

AionClaw专题整理AI智能体与电脑自动化相关功能使用教程,涵盖安装部署、AI任务执行、Skills技能、文件处理、浏览器控制、电脑操作、持久记忆、聊天工具连接以及办公、编程和内容创作等功能,帮助用户快速掌握AionClaw的实际使用方法。

0

2026.09.20

AI视频生成软件推荐
AI视频生成软件推荐

本专题汇总了当前主流的AI视频生成软件推荐与排行榜单,涵盖seko、AniShort、剧云、Lovart、LiblibAI及立刻mv等热门工具。同时整理了各软件在文生视频、图生视频、时长限制、画质表现及免费额度等方面的差异对比,助您快速选对适合创作需求的AI视频生成工具。

180

2026.09.16

ai生成视频的工具免费版合集
ai生成视频的工具免费版合集

本专题汇总了当前免费AI生成视频工具的排行榜与推荐清单,涵盖seko、讯飞智作、AniShort及剧云、Lovart等多模型集成平台。同时整理了各工具的免费额度、输出时长、水印政策及适用场景差异,助您快速选择合适工具开启AI视频创作。

100

2026.09.16

Pandas时间序列分析与可视化报表
Pandas时间序列分析与可视化报表

本专题整理Pandas日期转换、时间索引、重采样、滚动窗口、时区处理、plot绘图、Styler表格样式和报表输出方法。

80

2026.09.16

Pandas数据筛选索引与清洗处理
Pandas数据筛选索引与清洗处理

本专题整理Pandas中的loc、iloc、条件筛选、query查询、缺失值处理、重复值删除、类型转换和字符串列清洗方法。

60

2026.09.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Webman中文手册
Webman中文手册

共0课时 | 0人学习

Workerman官方手册
Workerman官方手册

共0课时 | 0人学习

ThinkPHP5.1完全开发手册
ThinkPHP5.1完全开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn