• 配置选项
    • 作用范围
    • 结束符检测
    • 长度检测
    • MQTT协议
    • Socket缓存区尺寸
    • 关闭Nagle合并算法
    • SSL/TLS证书
    • 绑定IP和端口
    • Socks5代理设置
    • 使用说明

    配置选项

    Client可以使用set方法设置一些选项,启用某些特性。

    作用范围

    • Swoole\Client
    • Swoole\Http\Client
    • Swoole\Coroutine\Client
    • Swoole\Coroutine\Http\Client
    • Swoole\Coroutine\Http2\Client

    结束符检测

    1. $client->set(array(
    2. 'open_eof_check' => true,
    3. 'package_eof' => "\r\n\r\n",
    4. 'package_max_length' => 1024 * 1024 * 2,
    5. ))

    长度检测

    1. $client->set(array(
    2. 'open_length_check' => 1,
    3. 'package_length_type' => 'N',
    4. 'package_length_offset' => 0, //第N个字节是包长度的值
    5. 'package_body_offset' => 4, //第几个字节开始计算长度
    6. 'package_max_length' => 2000000, //协议最大长度
    7. ));

    MQTT协议

    启用MQTT协议解析,onReceive回调将收到完整的MQTT数据包。

    1. $client->set(array(
    2. 'open_mqtt_protocol' => true,
    3. ));

    Socket缓存区尺寸

    1. $client->set(array(
    2. 'socket_buffer_size' => 1024*1024*2, //2M缓存区
    3. ));
    包括socket底层操作系统缓存区、应用层接收数据内存缓存区、应用层发送数据内存缓冲区

    关闭Nagle合并算法

    1. $client->set(array(
    2. 'open_tcp_nodelay' => true,
    3. ));

    SSL/TLS证书

    1. $client->set(array(
    2. 'ssl_cert_file' => $your_ssl_cert_file_path,
    3. 'ssl_key_file' => $your_ssl_key_file_path,
    4. ));
    swoole-1.7.21或更高版本可用

    绑定IP和端口

    仅设置bind_port是无效的,请同时设置bind_portbind_address
    • 机器有多个网卡的情况下,设置bind_address参数可以强制客户端Socket绑定某个网络地址。
    • 设置bind_port可以使客户端Socket使用固定的端口连接到外网服务器
    1. $client->set(array(
    2. 'bind_address' => '192.168.1.100',
    3. 'bind_port' => 36002,
    4. ));

    Socks5代理设置

    仅设置一个选项是无效的, 每次必须设置hostport
    1. $client->set(array(
    2. 'socks5_host' => '192.168.1.100',
    3. 'socks5_port' => 1080,
    4. 'socks5_username' => 'username',
    5. 'socks5_password' => 'password',
    6. ));
    • socks5_usernamesocks5_password为可选参数

    使用说明

    • 目前支持open_length_check和open_eof_check2种自动协议处理功能,参考swoole_server中的配置选项
    • 启用了自动协议后,同步阻塞客户端recv方法将不接受长度参数,每次必然返回一个完整的数据包
    • 启用了自动协议后,异步非阻塞客户端onReceive每次必然返回一个完整的数据包