配置选项

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

结束符检测

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

长度检测

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

MQTT协议

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

$client->set(array(
    'open_mqtt_protocol'     => true,
));

Socket缓存区尺寸

$client->set(array(
    'socket_buffer_size'     => 1024*1024*2, //2M缓存区
));

包括socket底层操作系统缓存区、应用层接收数据内存缓存区、应用层发送数据内存缓冲区

关闭Nagle合并算法

$client->set(array(
    'open_tcp_nodelay'     =>  true,
));

SSL/TLS证书

$client->set(array(
    'ssl_cert_file'     =>  $your_ssl_cert_file_path,
    'ssl_key_file'     =>  $your_ssl_key_file_path,
));

swoole-1.7.21或更高版本可用

绑定IP和端口

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

swoole-1.8.5或更高版本可用

Socks5代理设置

$client->set(array(
    'socks5_host'     =>  '192.168.1.100',
    'socks5_port'     =>  1080,
    'socks5_username' => 'username',
    'socks5_password' => 'password',
));
  • socks5_usernamesocks5_password为可选参数

Http代理设置

$client->set(array(
    'http_proxy_host'     =>  '192.168.1.100',
    'http_proxy_port'     =>  1080,
));

使用说明

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

  • 谢统领

    你好,我在使用swoole_client socks5代理连接时,报:[2017-03-31 16:01:19 *2932.16] ERROR swSocks5_connect (ERROR 7002): SOCKS authentication method not supported.PHP Warning: swoole_client::connect(): connect to server[127.0.0.1:1688] failed. Error: Operation now in progress[115]. in 。。。请问是什么原因? socks5代理用其它工具连接是正常的

  • 139

    想redis那样的协议有什么办法能够进行长度检测吗

  • zerovszero

    请问谁有 用swoole client 客户端中使用mqtt协议的例子?

  • 老刘

    [2018-04-12 21:27:51 @22258.0] WARNING zim_swoole_client_recv (ERROR 1201): Package is too big. package_length=1213486164 connect to server failed.

  • Listen

    WARNING zim_swoole_client_recv (ERROR 1201): Package is too big. package_length=1013461326 这个是什么原因呀

  • 臻琦D.

    WARNING swProtocol_recv_check_length: package is too big, remote_addr=127.0.0.1:52974, length=2065851251

    1、通过加大package_max_length配置也无法解决 2、另外我发的data也就几KB的数据,结果还是提示length=2065851251 3、设置open_length_check=false后,data被截断了

    请韩大神看看

  • 离地

    通过和大家一起探讨交流,技术提升的很快,自学还是比较局限的,这里有志同道合的学习伙,有需要的学习资料,小白也不用怕,各路大牛都很热心帮助(486583931),希望所有用心学习PHP的小伙伴都能成为优秀的程序员。