Client::__construct

函数原型:

function Client->__construct(int $sock_type, int $is_sync = SWOOLE_SOCK_SYNC, string $key);

可以使用底层提供的宏来之指定类型,请参考 常量定义

  • $sock_type表示socket的类型,如TCP/UDP
  • 使用$sock_type | SWOOLE_SSL可以启用SSL加密
  • $is_sync表示同步阻塞还是异步非阻塞,默认为同步阻塞
  • $key用于长连接的Key,默认使用IP:PORT作为key。相同key的连接会被复用

在 php-fpm/apache 中创建长连接

$cli = new Swoole\Client(SWOOLE_TCP | SWOOLE_KEEP);

加入SWOOLE_KEEP标志后,创建的TCP连接在PHP请求结束或者调用$cli->close()时并不会关闭。下一次执行connect调用时会复用上一次创建的连接。长连接保存的方式默认是以ServerHost:ServerPortkey的。可以再第3个参数内指定key。

  • SWOOLE_KEEP只允许用于同步客户端

Clientunset时会自动调用close方法关闭socket

在 Server 中使用 Client

  • 必须在事件回调函数中使用Client,不能在Server->start前创建
  • Server可以用任何语言编写的 socket client来连接。同样Client也可以去连接任何语言编写的socket server


  • 我的世界会有你

    SWOOLE_KEEP--长连接保存的方式是以ServerHost:ServerPort为key的?这句话,如何理解!!!

  • 我的世界会有你

    在的话,麻烦回复一下!!相请教如何使用长连接?

  • 赵英双

    我也很想知道长连接怎么使用,可是没人回答,真tmd郁闷

  • 桄欣

    以ServerHost:ServerPort为key的意思是,对相同的主机+端口号执行connect,就会复用以前建立好的tcp连接。

  • 桄欣

    例子在github上有 https://github.com/swoole/swoole-src/blob/master/examples/tcp_client.php

  • 我是益达我自豪

    php-fpm 创建长连接支持nginx么??

  • hijkoo@qq.com

    怎么被下架了

  • 桄欣

    作者调整了example代码文件的位置 https://github.com/swoole/swoole-src/blob/master/examples/client/long_tcp.php

  • 老船长

    SWOOLE_KEEP选项,复用原连接,只有在原PHP进程ID相同(应该是IP和端口号相同)的情况下才会复用。service端保留时间取决于$serv->set(['heartbeat_idle_time'=>10])。继续找在apache下指定进程ID的方法。

  • 老船长

    启用SWOOLE_KEEP时,client有时发数据,service收不到,去掉就一个不会丢。

  • 勇闯天涯

    启动 SWOOLE_KEEP 长连接,可以提高效率,对高并发处理很有帮助。

  • 有缘就是你

    你们是怎么模拟a服务器向b服务器发送数据的呀,发送了, b服务器接收,怎么编写呀?这个demo实例怎么模拟

  • 小疯子

    使用client和server通信,配置SWOOLE_TCP,SWOOLE_KEEP,open_length_check,client有时收到空字符串,是什么原因,怎么解决呢?