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

Workerman作为后端,UniApp小程序前端怎么实现稳定长连接?

阿晨吖_6137

阿晨吖_6137

发布时间:2026-05-25 22:46:47

|

608人浏览过

|

来源于php中文网

原创

uni.connectSocket 是唯一跨端 WebSocket 入口,必须用 wss:// 协议并 encodeURIComponent 参数;需在 onReady 后连接、onSocketOpen 后发消息;心跳与重连须手动实现;推荐全局单例管理连接状态。

workerman作为后端,uniapp小程序前端怎么实现稳定长连接?

uni.connectSocket 是唯一能打通微信小程序、App 和 H5 的入口,别碰 new WebSocket()——它在小程序和 App 里根本不会执行,H5 虽然能跑,但一编译就断,跨端直接失效。

连接必须用 wss:// 且参数要 encodeURIComponent

微信小程序强制要求 wss:// 协议,H5 和 App 也得统一,否则上线后连不上。URL 带查询参数(比如 ?token=abc+def)没问题,但必须用 encodeURIComponent 处理,否则 + 变空格,服务端解析失败,鉴权直接拒绝。

  • url: `wss://your-api.com/ws?token=${encodeURIComponent(token)}`
  • 别在 onLoad 里调 uni.connectSocket,页面还没挂载完,App 端大概率静默失败
  • 等 onReady 触发后再连,更稳;可加一层 uni.getNetworkType 校验网络再发起

首条消息只能在 uni.onSocketOpen 里发

uni.connectSocket 的 success 回调只表示 TCP 握手完成,不代表 WebSocket 协议层已 ready。此时调 uni.sendSocketMessage,90% 概率报 fail websocket not connected。

  • 收消息用 uni.onSocketMessage,注意 event.data 类型由服务端决定:文本是 string,二进制是 ArrayBuffer,不能硬假设是字符串
  • 发 JSON 必须先 JSON.stringify(),data 只接受 string 或 ArrayBuffer,传对象会静默丢弃
  • H5 支持 binaryType: 'arraybuffer' 配置,但小程序和 App 完全忽略,一律按服务端帧类型处理

心跳和重连必须手动实现,不能靠 onSocketClose

微信小程序切后台时不会触发 onSocketClose,而是静默断连;H5 页面休眠后也可能延迟甚至不触发。光监听 onSocketClose 会漏掉大量真实断连。

PigX UI 前端开发
PigX UI 前端开发

PigX UI Pro 前端开发指南 - Vue 3 + TypeScript + Element Plus。当用户提到 PigX UI、PigX 前端、lgb-mgui 项目、Vue 3 企业级后台开发、Element Plus 后台开发时使用此技能。

下载
  • 所有平台都必须主动发心跳包,建议间隔 30s,服务端 ping_timeout 设为 45s 左右
  • 用 setTimeout 控制心跳,避免 setInterval 在重连时叠加多个定时器
  • 重连前先查网络状态:uni.getNetworkType 返回 none 就别试,防止无效请求
  • 重连次数限制为 5 次,之后启用指数退避(1s → 3s → 9s…),避免打爆服务端
  • 小程序 onHide 里应主动 uni.closeSocket() 并清状态,resume 时不带残留连接

全局单例管理比页面级连接更可靠

每个页面都 new 一个 socket,不仅浪费资源,还会冲垮 Workerman 后端。Workerman 本身支持海量并发,但前提是连接是“有意图”的,不是被前端无序创建的垃圾实例拖垮的。

立即学习“前端免费学习笔记(深入)”;

  • 把 socket 初始化、发送、重连逻辑抽到 socket.js 或 main.js,暴露 send()、onMessage() 等方法
  • 各页面通过 import 或 uni.$emit/uni.$on 通信,避免重复连接
  • 连接状态(connecting / open / closed)必须集中维护,页面只读不写
  • Workerman 端记得在 onMessage 中更新 $connection->lastMessageTime,并配一个全局定时器清理超时连接
真正难的不是连上,而是连上之后没人管——没人清定时器、没人判 code 是 1001 还是 1006、没人把 onHide 和 onShow 对齐 socket 生命周期。这些细节堆在一起,才让长连接“看起来稳定”。

热门AI工具

更多
火山引擎

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

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

WorkBuddy

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

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

豆包大模型

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

DeepSeek

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

AionClaw
AionClaw Hot

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

切问学术

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

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2343

2023.08.11

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6150

2024.03.19

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

5486

2024.03.19

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2343

2023.08.11

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

5063

2023.10.09

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6150

2024.03.19

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

5678

2024.03.22

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

803

2024.05.22

C++运算符基础入门
C++运算符基础入门

本专题详细讲解了C++运算符的类型、语法与使用方法,涵盖算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、条件运算符及其他特殊运算符,并通过代码示例解析优先级与结合性。

0

2026.10.09

热门下载

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

精品课程

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

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