多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# Length\_Check 和 EOF\_Check 的使用 [TOC] 在外网通信时,有些客户端发送数据的速度较慢,每次只能发送一小段数据。这样`onReceive`到的数据就不是一个完整的包。 还有些客户端是逐字节发送数据的,如果每次回调`onReceive`会拖慢整个系统。 `Swoole`提供了`length_check`和`eof_check`的功能,在扩展底层检测到如果不是完整的请求,会等待新的数据到达,组成完整的请求后再回调`onReceive`。 ## EOF检测 在`swoole_server::set`中增加`open_eof_check`和`package_eof`来开启此功能。`open_eof_check => true`表示启用结束符检查,`package_eof`设置数据包结束符。[查看详细说明](1.7.3固定包头+包体协议自动分包.md) ## Length检测 在`swoole_server::set`中增加`open_length_check`来开启此功能。[查看详细说明](open\_length\_check.md) > `buffer`功能会将所有收到的数据放到内存中,会占用较多内存 > 通过设置`package_max_length`来设定每个连接最大缓存多少数据,超过此大小的连接将会被关闭 示例: ~~~ $server->set(array( 'worker_num' => 4, //worker process num 'backlog' => 128, //listen backlog 'max_request' => 50, 'dispatch_mode'=>1, 'package_eof' => "\r\n\r\n", //http协议就是以\r\n\r\n作为结束符的,这里也可以使用二进制内容 'open_eof_check' => 1, )); ~~~ * [EOF检测](https://wiki.swoole.com/wiki/page/p-buffer.html#entry_h2_0) * [Length检测](https://wiki.swoole.com/wiki/page/p-buffer.html#entry_h2_1)