代碼如下,是workerStart下的定時(shí)器:
// 進(jìn)程啟動(dòng)后設(shè)置一個(gè)每30秒運(yùn)行一次的定時(shí)器,定時(shí)關(guān)閉不發(fā)送心跳包的鏈接以及沒有sid屬性的鏈接
Timer::add(30, 'cleanWorkerInvalidConnection', [$worker]);
function cleanWorkerInvalidConnection(&$worker) {
$time_now = time();
if (!$worker || empty($worker->connections)) {
return;
}
foreach ($worker->connections as &$connection) {
if (empty($connection->sid)) {
$connection->close_reason = 'ip=' . $connection->getRemoteIp() . '的用戶連接sid屬性值為空';
$connection->close("\r\n");
continue;
}
// 有可能該connection還沒收到過消息,則lastMessageTime設(shè)置為當(dāng)前時(shí)間
if (empty($connection->lastMessageTime)) {
$connection->lastMessageTime = $time_now;
continue;
}
// 上次通訊時(shí)間間隔大于心跳間隔,則認(rèn)為客戶端已經(jīng)下線,關(guān)閉連接
if ($time_now - $connection->lastMessageTime > HEARTBEAT_TIME) {
if (isset($GLOBALS['worker_id_connection_id_sid_list'][getConnectionUniqueId($connection)])) {
$connection->close_reason = 'sid=' . $GLOBALS['worker_id_connection_id_sid_list'][getConnectionUniqueId($connection)] . '的用戶超時(shí)未發(fā)心跳包';
} else {
$connection->close_reason = 'sid=未知的用戶超時(shí)未發(fā)心跳包';
}
$connection->close("\r\n");
}
}
}
現(xiàn)在服務(wù)器啟動(dòng)后,代碼定時(shí)報(bào)錯(cuò):
Warning: Parameter 1 to cleanWorkerInvalidConnection() expected to be a reference, value given in /home/www/diary/workerManApi/Workerman/Events/Select.php on line 232
請(qǐng)問這里該怎么改呢?
這里我如果改成非引用傳參的形式,會(huì)不會(huì)起不到應(yīng)有的作用呢?
function cleanWorkerInvalidConnection(&$worker)
改成
function cleanWorkerInvalidConnection($worker)