之前的版本中,多端口监控的心跳检测功能只能在主服务上配置,不能为每个端口设置分别设置心跳时间。比如需要在9501端口设置30秒,在9502端口设置60秒。从v4.7版本开始支持,下面就来详细了解一下。配置项在Server中提供了两个配置项:heartbeat_check_interval和heartbeat_idle_time。可以使用如下配置项增加心跳检测:$server->set(['heartbeat_check_interval'=>60,'heartbeat_idle_time'=>120,]);heartbeat_check_interval表示循环执行的频率,以秒为单位。比如heartbeat_check_interval=>60,表示每60秒遍历所有连接。如果连接在120秒内没有向服务器发送任何数据(heartbeat_idle_time如果不设置默认为两倍间隔),连接将被强制关闭。heartbeat_idle_time表示连接的最大允许空闲时间。示例下面是一段测试用的多端口监控代码,针对不同的端口设置心跳检测:为了测试方便,设置心跳检测时间为1秒useSwoole\Server;$server=newServer('127.0.0.1',9501,SWOOLE_BASE);$server->set(['heartbeat_check_interval'=>1,'heartbeat_idle_time'=>1,]);$server->on('connect',函数($server,$fd){$time=date('Y-m-dH: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-dH:i:s');echo"[{$time}]Client#{$fd}:关闭.\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,]);$服务器->开始();可以使用telnet或者Swoole的TCP客户端进行测试。这里我们使用telnet进行测试,分别连接3个端口telnet127.0.0.19501telnet127.0.0.19502telnet127.0.0.19503使用v4.6版本测试输出:[2021-07-0510:06:44]Client#1:连接。[2021-07-0510:06:45]客户端#2:连接。[2021-07-0510:06:46]客户端#3:连接。[2021-07-0510:06:46]客户端#1:关闭。[2021-07-0510:06:47]客户端#2:关闭。[2021-07-0510:06:48]客户端#3:关闭。连接1、2、3在2秒后全部断开。然后使用最新的v4.7版本进行测试:[2021-07-0510:02:50]Client#1:Connect.[2021-07-0510:02:51]Client#2:Connect.[2021-07-0510:02:51]客户端#1:关闭。[2021-07-0510:02:52]客户端#3:连接。[2021-07-0510:02:53]客户端#2:关闭.[2021-07-0510:03:02]客户#3:关闭。1秒后连接1断开;2秒后连接2断开;连接3在10秒后断开。这样的输出结果符合配置的心跳检测配置,需要使用该功能的用户可以升级体验。
