× 警告!旧版文档已经暂停维护,请查看新版文档。点击前往新版文档

SWOOLE_KEEP建立TCP长连接

swoole_client支持在php-fpm/apache中创建一个TCP长连接到服务器端。使用方法:

$client = new swoole_client(SWOOLE_SOCK_TCP | SWOOLE_KEEP);
$client->connect('127.0.0.1', 9501);

启用SWOOLE_KEEP选项后,一个请求结束不会关闭socket,下一次再进行connect时会自动复用上次创建的连接。如果执行connect发现连接已经被服务器关闭,那么connect会创建新的连接。

SWOOLE_KEEP的优势

  • TCP长连接可以减少connect 3次握手/close 4次挥手带来的额外IO消耗
  • 降低服务器端close/connect次数

  • json

    这个事什么原理呢

  • 豆芽沁

    为什么使用了长链接配置,客户端断开连接重新连接之后,$fd的值不是保留上次的呢?

  • mrun

    我也发现了这个问题

  • Jesse

    我也遇到这个问题

  • 帝豪

    断线自动重连,是否有回调函数可以处理?

  • 喵、 小泽等233人觉得很赞

    怎么自动复用上次创建的连接?连接后fd不一样呀

  • 长脚的海星星

    说FD不一样的 你们检查下你们的server端的receive是不是在调用 $server->close($fd);注释掉即可

  • 恩点

    SWOOLE_KEEP使得web响应时间变长了,这个怎么解

  • 18802098633

    在swoole_http_server里面使用,远程tcp服务器没开启,isConnected返回true,发送数据失败,导致worker进程关闭,需要先开启远程tcp服务器;如果远程服务器断开了再次连接,发送数据不报错,也没成功,不能再swoole_http_server里面使用吗?

  • 18665661344

    我也遇到每次长连接fd不一样,经过测试发现,是客户端发起了十几个长连接,到达一定数量后,客户端再次发起请求,就会复用前面发起的长连接了。