文檔示例的代碼是用定時(shí)器去獲取心跳包超時(shí)了沒有,但是我加了打印發(fā)現(xiàn)判斷空的這個(gè)一直沒有打印出來。
請問是示例代碼有問題嗎 還是我這個(gè)有問題,
onWorkerStart里面的定時(shí)器代碼
define('HEARTBEAT_TIME', 10);
Timer::add(2, function () use ($db, $ad_worker) {
$time_now = time();
foreach ($ad_worker->connections as $connection) {
// 有可能該connection還沒收到過消息,則lastMessageTime設(shè)置為當(dāng)前時(shí)間
if (empty($connection->lastMessageTime)) {
print_r('empty:' . PHP_EOL);
$connection->lastMessageTime = $time_now;
continue;
}
// 上次通訊時(shí)間間隔大于心跳間隔,則認(rèn)為客戶端已經(jīng)下線,關(guān)閉連接
if ($time_now - $connection->lastMessageTime > HEARTBEAT_TIME) {
OffLine($db, $connection);
print_r('offline:' . $connection->id . PHP_EOL);
$connection->close();
}
}
});
onMessage里面
$connection->lastMessageTime = time();