🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 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(); ~~~