Server 被动心跳检测
此种情况下Server 并不会主动向客户端发送心跳包,而是被动等待客户端发送心跳。
服务器端的 heartbeat_check 仅仅是检测连接上一次发送数据的时间,如果超过限制,将切断连接。被心跳检测切断的连接依然会触发 onClose 事件回调
$serv = new Swoole\Server("0.0.0.0", 9301, SWOOLE_PROCESS); $serv->set(array( 'worker_num' => 1, 'open_tcp_keepalive' => true, 'tcp_keepidle' => 4, //4s没有数据传输就进行检测 'tcp_keepinterval' => 1, //1s探测一次 'tcp_keepcount' => 5, //探测的次数,超过5次后还没回包close此连接 )); $serv->on('connect', function ($serv, $fd) { var_dump("Client:Connect $fd"); }); $serv->on('receive', function ($serv, $fd, $reactor_id, $data) { var_dump($data); }); $serv->on('close', function ($serv, $fd) { var_dump("close fd $fd"); }); $serv->start();
client客户端定时发送心跳包
// 定义心跳包数据,可以是一个简单的字符串或者协议规定的数据格式 $heartbeatPacket = "HEARTBEAT"; // 设置心跳间隔,例如每30秒发送一次心跳包 $heartbeatInterval = 30; while (true) { // 发送心跳包 $client->send($heartbeatPacket); // 休眠一段时间,等待下一次心跳 sleep($heartbeatInterval); }
server主动心跳监测
与 heartbeat_check_interval 的被动检测不同,此方法主动检测服务器所有连接,并找出已经超过约定时间的连接。
如果指定 if_close_connection,则自动关闭超时的连接。未指定仅返回连接的 fd 数组。Swoole\Server->heartbeat(bool $ifCloseConnection = true): bool|array
参数
bool $ifCloseConnection功能:是否关闭超时的连接默认值:true其它值:false返回值调用成功将返回一个连续数组,元素是已关闭的 $fd调用失败返回 false
网友回复
为啥所有的照片分辨率提升工具都会修改照片上的图案细节?
js如何在浏览器中将webm视频的声音分离为单独音频?
微信小程序如何播放第三方域名url的mp4视频?
ai多模态大模型能实时识别视频中的手语为文字吗?
如何远程调试别人的chrome浏览器获取调试信息?
为啥js打开新网页window.open设置窗口宽高无效?
浏览器中js的navigator.mediaDevices.getDisplayMedia屏幕录像无法录制SpeechSynthesisUtterance产生的说话声音?
js中mediaRecorder如何录制window.speechSynthesis声音音频并下载?
python如何直接获取抖音短视频的音频文件url?
js在浏览器中如何使用MediaStream与MediaRecorder实现声音音频多轨道混流?