Workerman自定义协议类无需继承父类,只需在Protocols命名空间下定义public static的input、decode、encode三个方法,分别处理包长判断、数据解析与序列化。

不需要继承任何父类。
Workerman 自定义协议类的核心要求是:必须定义三个静态方法 —— input、decode、encode,且它们需为 public static,签名和行为符合框架约定。
-
input(string $buffer): int:返回完整包长度,或 0 表示数据不足 -
decode(string $buffer): mixed:将已确认完整的二进制数据解析为 PHP 可用结构(如数组、对象) -
encode(mixed $data): string:将 PHP 数据序列化为待发送的二进制流
只要类中存在这三个静态方法,Workerman 就能通过反射调用,无需实现接口、也不需继承基类(如 Protocol 或其他抽象类)。官方文档与源码均未强制继承关系,实际项目中绝大多数自定义协议类都是独立的普通 PHP 类。
注意:命名空间需为 Protocols(如 namespace Protocols;),文件路径应放在 Protocols/ 目录下(例如 app/Protocols/MyProto.php),否则 Workerman 无法自动识别加载。
常见写法示例:
```php class MyProto { public static function input(string $buffer): int { if (strlen($buffer) < 4) return 0; $len = unpack('N', $buffer)[1]; return $len + 4; // 包头4字节 + 包体长度 }public static function decode(string $buffer): array
{
$len = unpack('N', $buffer)[1];
$body = substr($buffer, 4, $len);
return json_decode($body, true) ?: [];
}
public static function encode(array $data): string
{
$body = json_encode($data, JSON_UNESCAPED_UNICODE);
$len = strlen($body);
return pack('N', $len) . $body;
}}
<p>总结一句话:不继承、不实现接口,只靠三个静态方法契约驱动。</p>

















