多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# open_length_check 打开包长检测特性。包长检测提供了固定包头+包体这种格式协议的解析。启用后,可以保证`Worker`进程`onReceive`每次都会收到一个完整的数据包。 长度协议提供了`3`个选项来控制协议细节。 > 此配置仅对`STREAM`类型的`Socket`有效,如`TCP`、`Unix Socket Stream` package_length_type ---- 包头中某个字段作为包长度的值,底层支持了`10`种长度类型。请参考 [package_length_type](https://wiki.swoole.com/wiki/page/463.html) package_body_offset ----- 从第几个字节开始计算长度,一般有2种情况: * `length`的值包含了整个包(包头+包体),`package_body_offset` 为`0` * 包头长度为`N`字节,`length`的值不包含包头,仅包含包体,`package_body_offset`设置为`N` package_length_offset ---- `length`长度值在包头的第几个字节。 ### 示例:### ```c struct { uint32_t type; uint32_t uid; uint32_t length; uint32_t serid; char body[0]; } ``` 以上通信协议的设计中,包头长度为`4`个整型,`16`字节,`length`长度值在第`3`个整型处。因此`package_length_offset`设置为`8`,`0-3`字节为`type`,`4-7`字节为`uid`,`8-11`字节为`length`,`12-15`字节为`serid`。 ```php $server->set(array( 'open_length_check' => true, 'package_max_length' => 81920, 'package_length_type' => 'N', 'package_length_offset' => 8, 'package_body_offset' => 16, )); ```