前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swoole v4.7 版本新特性预览之支持为每个端口设置不同的心跳检测时间

Swoole v4.7 版本新特性预览之支持为每个端口设置不同的心跳检测时间

作者头像
沈唁
发布2021-07-23 12:21:37
7440
发布2021-07-23 12:21:37
举报
文章被收录于专栏:沈唁志沈唁志

在之前的版本中,多端口监听的心跳检测功能只能配置在主服务上,无法为每个端口单独设置心跳时间。

例如需要在9501端口上设置 30 秒,而9502端口上设置 60 秒。从v4.7版本开始进行了支持,下面来详细了解一下。

配置项

Server 中提供了两个配置项:heartbeat_check_intervalheartbeat_idle_time

可以使用如下配置项增加心跳检测:

代码语言:javascript
复制
$server->set([
    'heartbeat_check_interval' => 60,
    'heartbeat_idle_time'      => 120,
]);

heartbeat_check_interval 表示每隔多久轮循一次,单位为秒。如 heartbeat_check_interval => 60,表示每 60 秒遍历所有连接。

如果该连接在 120 秒内(heartbeat_idle_time 未设置时默认为 interval 的两倍),没有向服务器发送任何数据,此连接将被强制关闭。

heartbeat_idle_time 表示连接最大允许空闲的时间。

示例

这里提供了一个多端口监听的代码用于测试,分别为不同的端口设置心跳检测:

为了方便测试将心跳检测时间设置为 1 秒

代码语言:javascript
复制
use Swoole\Server;

$server = new Server('127.0.0.1', 9501, SWOOLE_BASE);
$server->set([
    'heartbeat_check_interval' => 1,
    'heartbeat_idle_time' => 1,
]);
$server->on('connect', function ($server, $fd) {
    $time = date('Y-m-d H:i:s');
    echo "[{$time}] Client#{$fd}: Connect.\n";
});
$server->on('receive', function ($server, $fd, $reactorId, $data) {
    $server->send($fd, 'ok');
});
$server->on('close', function ($server, $fd) {
    $time = date('Y-m-d H:i:s');
    echo "[{$time}] Client#{$fd}: Close.\n";
});

$port2 = $server->listen('127.0.0.1', 9502, SWOOLE_SOCK_TCP);
$port2->set([
    'heartbeat_idle_time' => 2,
]);

$port3 = $server->listen('127.0.0.1', 9503, SWOOLE_SOCK_TCP);
$port3->set([
    'heartbeat_idle_time' => 10,
]);

$server->start();

可以使用telnet或者 Swoole 的 TCP 户端进行测试。

这里使用了telnet进行测试,分别连接 3 个端口

代码语言:javascript
复制
telnet 127.0.0.1 9501
telnet 127.0.0.1 9502
telnet 127.0.0.1 9503

使用 v4.6 版本进行测试会输出:

代码语言:javascript
复制
[2021-07-05 10:06:44] Client#1: Connect.
[2021-07-05 10:06:45] Client#2: Connect.
[2021-07-05 10:06:46] Client#3: Connect.
[2021-07-05 10:06:46] Client#1: Close.
[2021-07-05 10:06:47] Client#2: Close.
[2021-07-05 10:06:48] Client#3: Close.

连接 123 都是在 2 秒之后的断开的。

那么再使用最新的v4.7版本进行测试:

代码语言:javascript
复制
[2021-07-05 10:02:50] Client#1: Connect.
[2021-07-05 10:02:51] Client#2: Connect.
[2021-07-05 10:02:51] Client#1: Close.
[2021-07-05 10:02:52] Client#3: Connect.
[2021-07-05 10:02:53] Client#2: Close.
[2021-07-05 10:03:02] Client#3: Close.
  • 连接 11 秒之后断开;
  • 连接 22 秒之后断开;
  • 连接 310 秒之后断开。

这样的输出结果符合所配置的心跳检测配置,需要使用该功能的用户可以进行升级体验。

代码语言:javascript
复制
好文和朋友一起看~
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 沈唁志 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 配置项
  • 示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档