$worker = new Worker();
$worker->onWorkerStart = function ($worker) {
//a客戶端
$con = new AsyncTcpConnection('ws:/aaa.com');
$con->onConnect = function ($con) {
echo '=連接=';
$con->lastMessageTime = time();
//心跳
$time_interval = 5;
$con->timer_id = Timer::add($time_interval, function () use ($con) {
$stamp = time();
//斷線重連
if (($stamp - $con->lastMessageTime) > 7) {
echo '=斷線重連=';
Timer::del($con->timer_id);
$con->close();
} else {
$con->send('{"ping": '. $stamp .'}');
}
});
};
$con->onMessage = function ($con, $data) {
$data = json_decode($data, true);
if (isset($data)) {
$con->lastMessageTime = $data;
return;
}
};
$con->onClose = function ($con) {
echo '=關(guān)閉=';
if (isset($con->timer_id)) {
Timer::del($con->timer_id);
}
$con->reConnect(2);
};
$con->connect();
//b客戶端
$cons = new AsyncTcpConnection('ws:/bbb.com');
$cons->onConnect = function ($cons) {
echo '=連接s=';
$cons->lastMessageTime = time();
//心跳
$time_interval = 5;
$cons->timer_id = Timer::add($time_interval, function () use ($cons) {
$stamp = time();
//斷線重連
if (($stamp - $cons->lastMessageTime) > 7) {
echo '=斷線重連s=';
Timer::del($cons->timer_id);
$cons->close();
} else {
$cons->send('{"ping": '. $stamp .'}');
}
});
};
$cons->onMessage = function ($cons, $data) {
$data = json_decode($data, true);
if (isset($data)) {
$cons->lastMessageTime = $data;
return;
}
};
$cons->onClose = function ($cons) {
echo '=關(guān)閉s=';
if (isset($cons->timer_id)) {
Timer::del($cons->timer_id);
}
$cons->reConnect(2);
};
$cons->connect();
};
Worker::runAll();
運(yùn)行一段時(shí)候,會出現(xiàn)下圖中的無限斷線重連問題,客戶端a和b都有出現(xiàn)過這個(gè)問題,實(shí)在想不通,求助
?
1、if ($stamp - $cons->lastMessageTime) > 7,? 定時(shí)器第二次執(zhí)行的時(shí)候肯定滿足這個(gè)條件了;
2、另外根據(jù)場景:$con->lastMessageTime = time(); 應(yīng)該改為:
empty($con->lastMessageTime) && $con->lastMessageTime = time();