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

简介: 在之前的版本中,多端口监听的心跳检测功能只能配置在主服务上,无法为每个端口单独设置心跳时间。例如需要在9501端口上设置 30 秒,而9502端口上设置 60 秒。从v4.7版本开始进行了支持.

配置项

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

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

$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 秒

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 个端口

telnet 127.0.0.1 9501
telnet 127.0.0.1 9502
telnet 127.0.0.1 9503

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

[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版本进行测试:

[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 秒之后断开。

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

目录
相关文章
|
弹性计算 网络协议 安全
【图文教程】阿里云服务器开放端口设置(超详细)
阿里云服务器端口怎么打开?云服务器ECS端口在安全组中开启,轻量应用服务器端口在防火墙中打开,阿里云服务器网以80端口为例,来详细说下阿里云服务器端口开放图文教程,其他的端口如8080、3306、443、1433也是同样的方法进行开启端口:
19645 1
|
12月前
|
网络协议 Linux 网络安全
Centos7 防火墙配置+端口设置
Centos7 防火墙配置+端口设置
238 0
Centos7 防火墙配置+端口设置
|
9天前
|
域名解析 存储 缓存
HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口
【6月更文挑战第23天】 HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口;TCP连接(HTTP/1.1可能需排队);三次握手;发送请求头与体;服务器处理并返回响应;TCP连接可能关闭或保持;浏览器接收并显示响应,更新缓存。HTTP版本间有差异。
21 5
|
6天前
|
网络协议 安全 Docker
windows环境下的设置docker远程访问(开放2375端口)
windows环境下的设置docker远程访问(开放2375端口)
11 0
|
6天前
|
网络安全
阿里云8888端口设置安全组,宝塔控制台显示链接失败
阿里云8888端口设置安全组,宝塔控制台显示链接失败
9 0
|
14天前
|
Oracle 关系型数据库 MySQL
实时计算 Flink版操作报错合集之ip和端口都是通的,连接池设置为200,连接报错,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
2月前
|
运维 程序员 Linux
运维最全Linux 基本防火墙设置和开放端口命令,2024年最新程序员如何自我学习和成长
运维最全Linux 基本防火墙设置和开放端口命令,2024年最新程序员如何自我学习和成长
|
11月前
|
Kubernetes 应用服务中间件 调度
k8s--pod 基本配置、镜像拉取策略、启动命令、端口设置、资源配额
k8s--pod 基本配置、镜像拉取策略、启动命令、端口设置、资源配额
k8s--pod 基本配置、镜像拉取策略、启动命令、端口设置、资源配额
|
2月前
|
测试技术
Netty4 websocket 开启服务端并设置IP和端口号
Netty4 websocket 开启服务端并设置IP和端口号
99 0
|
12月前
|
网络协议
swoole 端口监听,关闭tcp服务
某直播平台,需要观察员去不定时的抽查直播平台的内容,对于直播网站不良的直播进行封禁和停播的处理。
114 0
swoole 端口监听,关闭tcp服务