package_length_func
最后更新于:2022-04-02 06:37:44
# package\_length\_func
[TOC]
设置长度计算函数,与`Server`的使用方法完全一致。与`open_length_check`配合使用。长度函数必须返回一个整数。此配置对同步客户端、异步客户端均有效。
* 返回`0`,数据不足,需要接收更多数据
* 返回`-1`,数据错误,底层会自动关闭连接
* 返回包的总长度值(包括包头和包体的总长度),底层会自动将包拼好后返回给回调函数
默认底层最大会读取`8K`的数据,如果包头的长度较小可能会存在内存复制的消耗。可设置`package_body_offset`参数,底层只读取包头进行长度解析。
## 实例
~~~
$client = new swoole_client(SWOOLE_SOCK_TCP);
$client->set(array(
'open_length_check' => true,
'package_length_func' => function ($data) {
if (strlen($data) < 8) {
return 0;
}
$length = intval(trim(substr($data, 0, 8)));
if ($length <= 0) {
return -1;
}
return $length + 8;
},
));
if (!$client->connect('127.0.0.1', 9501, -1))
{
exit("connect failed. Error: {$client->errCode}\n");
}
$client->send("hello world\n");
echo $client->recv();
$client->close();
~~~
';