encode方法的作用是将php变量序列化为符合自定义规则的字节流,供workerman发送给客户端;它在$connection->send($data)时被自动调用,必须返回string类型,常见实现包括json加换行、长度头拼接、魔数校验等。

encode 方法的作用是:把 PHP 变量(比如数组、字符串、对象)转换成符合你自定义规则的原始字节流,供 Workerman 通过 TCP/UDP 发送给客户端。
它发生在服务端调用 $connection->send($data) 时,Workerman 会自动把 $data 传给 encode(),再把返回值作为实际发送的二进制数据。
这个过程不是可选的——只要用了自定义协议,encode 就是必实现的环节。它决定了客户端收到的是什么格式、有没有包头、是否带长度字段、是否加密、是否加换行符等。
常见实现逻辑包括:
- 把数组
json_encode()后加\n(适用于 telnet 或简单 JSON 行协议) - 按固定格式拼接:
pack('N', strlen($body)) . $body(4 字节大端长度 + 原始内容,解决粘包) - 添加自定义魔数、版本号、校验和等头部字段
- 对敏感字段做 base64 编码或简单 XOR 加密(非安全场景下快速混淆)
注意点:
- 输入参数
$data是 PHP 值,不是字符串;你得自己决定怎么序列化它 - 返回值必须是
string类型,不能是false或null,否则 Workerman 会报错或静默丢弃 - 不要在这个方法里做耗时操作(如数据库查询、远程请求),否则阻塞整个连接处理
举个典型例子(JSON + 换行):
public static function encode($data)
{
return json_encode($data, JSON_UNESCAPED_UNICODE) . "\n";
}
客户端收到的就是类似 {"code":0,"msg":"ok"}\n 这样的字节流。











