0

0

Workerman的Text协议是什么_换行符分割数据格式介绍【介绍】

雪夜

雪夜

发布时间:2026-03-14 13:27:01

|

824人浏览过

|

来源于php中文网

原创

Text协议仅用\n切分消息,不识别\r\n,不处理粘包半包,要求每条消息必须以\n结尾,否则会阻塞;input()函数扫描首个\n位置返回偏移量,未找到则返回0等待更多数据。

workerman的text协议是什么_换行符分割数据格式介绍【介绍】

Text协议就是用\n切数据,不是\r\n

Workerman 的 TextProtocol 本质就是按行读取:每次收到数据后,遇到第一个 \n 就截断,把前面部分当作一条完整消息。它不识别 \r\n,也不处理粘包或半包的边界逻辑——这些都交给底层 TCP 流自己“凑齐”,协议只负责切。

常见错误现象:
– 客户端发 "hello\r\n",服务端收不到完整消息,甚至卡住
– 多条消息合并成一个 TCP 包(如 "a\nb\nc\n"),TextProtocol 会正确拆成三条,但若中间缺 \n(如 "a\nb"),第二条就一直等下去

  • 必须确保每条消息末尾是 \n,不能是 \r\n\r
  • 发送方如果是 Windows 环境下的 Python、Node.js 等,默认可能用 \r\n,得显式改成 \n
  • 如果消息本身含 \n(比如 JSON 多行字符串),TextProtocol 会误切——它不适合传结构化/可变长内容

TextProtocolinput() 函数怎么判断一条消息结束

input() 是 Workerman 协议解析入口函数,返回值决定是否凑够一条消息。对 TextProtocol 来说,它的实现极简:扫描输入缓冲区,找到第一个 \n 的位置,返回该偏移量;没找到就返回 0,表示继续等数据。

使用场景:
– 你自定义协议时参考这个逻辑,别直接复制——比如想支持 \r\n,就得改扫描条件
– 调试时可在 input() 里加日志,看实际传入的 $buffer 是什么内容

  • 返回值是整数:>0 表示切掉前 N 字节作为消息;0 表示暂不处理;-1 表示丢弃整个缓冲区(极少用)
  • 它不修改原 $buffer,只是告诉 Workerman “从开头截多少”
  • 如果缓冲区里有多个 \ninput() 只认第一个——剩下的留给下一次调用处理

为什么不用 TextProtocol 处理 JSON 或二进制数据

因为 TextProtocol 的切分逻辑和数据语义完全脱钩。它不管内容是不是合法 JSON,也不管字节是不是 UTF-8 编码,只机械找 \n。一旦消息体里自带换行(比如缩进 JSON、日志多行堆栈),就会被提前截断。

听脑AI
听脑AI

听脑AI语音,一款专注于音视频内容的工作学习助手,为用户提供便捷的音视频内容记录、整理与分析功能。

下载

性能影响:
– 看似简单,但频繁扫描缓冲区 + 多次内存拷贝(每次切一条就 new 一个字符串),在高并发小消息场景下比固定包头协议更耗 CPU
– 没有长度校验,无法防御恶意超长行攻击(比如发一个 1GB 的无 \n 字符串,缓冲区会不断增长)

  • JSON 推荐用 JsonProtocol(需两端约定格式)或自定义协议 + pack/unpack
  • 二进制协议必须绕过 TextProtocol,改用 FrameProtocol 或手写 input() 解析包头长度
  • 哪怕只是传纯文本日志,也建议加长度前缀,避免单行日志意外含 \n

Workerman 启动时提示 Unknown protocol: Text 怎么办

这不是协议名写错,而是类没加载。Workerman 5.x 开始默认不自动注册 TextProtocol,必须手动 use 并传类名字符串,或者传完整类路径。

典型错误:
– 写 'protocol' => 'Text' → 报错
– 写 'protocol' => \Workerman\Protocols\TextProtocol::class → 正确

  • 确认 Workerman 版本 ≥ 4.0.0(旧版类路径不同,可能是 Workerman\Protocols\Text
  • 如果用 Composer 自动加载,确保没有拼错命名空间,IDE 可能提示补全但实际类不存在
  • 命令行启动时加 -d 参数开启 debug,能看到协议类是否成功实例化
TextProtocol 的边界非常窄:它只适合可信环境下的、严格由你控制输出格式的纯文本管道。只要客户端不可控、消息内容不可预知、或者需要兼容历史系统(比如老设备只发 \r\n),就得立刻换协议。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
composer是什么插件
composer是什么插件

Composer是一个PHP的依赖管理工具,它可以帮助开发者在PHP项目中管理和安装依赖的库文件。Composer通过一个中央化的存储库来管理所有的依赖库文件,这个存储库包含了各种可用的依赖库的信息和版本信息。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

162

2023.12.25

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

457

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

549

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

337

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

761

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1570

2023.10.24

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

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

精品课程

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号