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

Workerman onMessage收不到数据是什么原因

夏浩酱_4042

夏浩酱_4042

发布时间:2026-08-08 18:03:49

|

904人浏览过

|

来源于php中文网

原创

Workerman onMessage收不到数据,首要确认客户端使用ws://协议、在onopen后send、服务端Worker协议为websocket://;其次检查前端是否JSON.stringify发送、避免用Postman等工具误测,排查onMessage是否被覆盖或缓冲区污染。

workerman onmessage收不到数据是什么原因

Workerman onMessage收不到数据,意味着客户端已成功建立连接,但服务端始终无法触发onMessage回调,常见于WebSocket或TCP长连接场景。这既不是网络不通,也不是进程未启动,而是数据在抵达onMessage之前就被拦截、丢弃或根本没进入正确处理流程。

客户端发的数据压根没走WebSocket协议

第一步:确认客户端连接的是ws://或wss://,而不是http://——浏览器用new WebSocket('http://xxx')会静默失败,控制台报错“Invalid URL”,但onConnect仍会触发,后续send无响应。

第二步:检查客户端是否在open事件后才调用send()。若在onopen前就send({msg:'hi'}),Workerman不会报错,但该消息会被内核丢弃,onMessage永不触发。

第三步:用Chrome开发者工具→Network→WS→Messages面板,看「Frames」里有没有Outgoing Message。没有发送记录,说明问题出在前端;有发送但右侧没Incoming,说明服务端没收到或没进onMessage。

服务端监听的不是WebSocket协议

检查$worker初始化时的协议类型:【必须是'websocket://'开头,不能写'tcp://'或'http://'】。写成$worker = new Worker('tcp://0.0.0.0:2345'),即使前端连ws://,Workerman也只当裸TCP处理,不会解WebSocket帧,$data永远为null。

方法一:改协议头
把'tcp://0.0.0.0:2345'换成'websocket://0.0.0.0:2345',并确保Workerman版本≥3.5.0(旧版不支持原生WebSocket)。

方法二:手动加载WebSocket协议类(兼容老版本)
require_once __DIR__ . '/Workerman/Protocols/WebSocket.php';
$worker = new Worker('tcp://0.0.0.0:2345');
$worker->protocol = \Workerman\Protocols\WebSocket::class;

客户端发的是原始字符串而非标准WebSocket帧

前端必须用WebSocket.send()发送UTF-8字符串,不能直接send({a:1})——这会触发TypeError且消息被浏览器丢弃。正确做法是:ws.send(JSON.stringify({msg:'hello'}))。

Apifox、Postman或curl测试时,默认发送raw文本,不是WebSocket帧。这类工具根本无法模拟WebSocket握手和帧格式,【强行用它们测onMessage注定失败】。

真正有效的调试方式只有两种:浏览器原生WebSocket + console.log,或用wscat命令行工具:wscat -c ws://localhost:2345,连接成功后手动输入字符串回车发送。

Workerman接收缓冲区被污染或协议解析中断

如果服务曾处理过非法帧(比如客户端强行断开、发送非UTF-8字节、超长payload),Workerman内部WebSocket协议解析器可能卡在中间状态,后续合法帧也被跳过。此时onMessage不再触发,但连接仍显示活跃。

解决办法:重启Worker进程。不要只reload,要stop再start,确保协议解析器状态重置。

预防措施:在onMessage开头加兜底判断:if (!is_string($data) || empty($data)) { return; },避免空值干扰后续逻辑。

onMessage回调被意外覆盖或未绑定

检查是否写了多次$worker->onMessage = function() {...}。PHP中后赋值会完全覆盖前一个,如果你在不同文件或条件分支里重复赋值,最后一处生效,前面的逻辑彻底丢失。

典型错误:在Worker启动前先设了一个通用onMessage,又在某个if分支里重新赋值,结果只有分支成立时才生效;分支不成立时,onMessage为空函数,收不到任何数据。

验证方式:在onConnect里var_dump($worker->onMessage),输出NULL就说明没绑定,输出Closure说明已绑定。

热门AI工具

更多
Laper
Laper Hot

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

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

Atoms
Atoms Hot

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

WorkBuddy

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

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

豆包大模型

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

DeepSeek

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

切问学术

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

讯飞智作

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

相关专题

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

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

166

2026.05.20

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

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

202

2026.05.20

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

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

187

2026.05.20

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

80

2026.09.30

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

80

2026.09.30

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

40

2026.09.30

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

40

2026.09.30

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

60

2026.09.29

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

280

2026.09.23

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
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