workerman 5.2.3 自定义协议必须实现 input、decode、encode 三个静态方法:input 判断数据包完整性并返回长度或 0/false;decode 解析完整字节为业务数据;encode 将业务数据打包为网络字节流,需与 decode 逆向兼容并含分隔符或长度头。

Workerman 5.2.3 自定义协议仍需实现三个静态方法:input、decode、encode。这是框架协议接口(Workerman\Protocols\ProtocolInterface)的强制约定,5.2.3 版本未改变该设计。
这三个方法各司其职,缺一不可:
input($buffer)
判断当前接收缓冲区中是否已存在一个完整数据包。
返回值含义:
•0→ 数据不完整,继续等待;
• 正整数(如12)→ 取出前12字节作为一包;
•false→ 协议异常,立即断开连接。decode($buffer)
对input判定为完整的那一段原始字节(不含多余数据)进行解析。
例如:去掉换行符、json_decode、unpack解析二进制头等,返回业务层可直接使用的结构(如数组或对象)。encode($data)
将业务逻辑返回的数据(如['code'=>0, 'msg'=>'ok'])转换为网络可传输的字节流。
必须保证与decode逆向兼容,且通常需附带分隔标记(如"\n")或长度头,以配合input的分包逻辑。
注意:类必须声明为 static 方法,命名空间建议为 Protocols(如 Protocols\JsonNL),文件路径需符合自动加载规则(如 app/Protocols/JsonNL.php),并在创建 Worker 时通过协议名引用:
$worker = new Worker('JsonNL://0.0.0.0:2345');
不依赖额外接口或抽象类,也不需要构造函数或实例化——纯静态契约。











