代碼如下,是workerStart下的定時器:
// 進程啟動后設置一個每30秒運行一次的定時器,定時關閉不發(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設置為當前時間
if (empty($connection->lastMessageTime)) {
$connection->lastMessageTime = $time_now;
continue;
}
// 上次通訊時間間隔大于心跳間隔,則認為客戶端已經(jīng)下線,關閉連接
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)] . '的用戶超時未發(fā)心跳包';
} else {
$connection->close_reason = 'sid=未知的用戶超時未發(fā)心跳包';
}
$connection->close("\r\n");
}
}
}
現(xiàn)在服務器啟動后,代碼定時報錯:
Warning: Parameter 1 to cleanWorkerInvalidConnection() expected to be a reference, value given in /home/www/diary/workerManApi/Workerman/Events/Select.php on line 232
請問這里該怎么改呢?
這里我如果改成非引用傳參的形式,會不會起不到應有的作用呢?
function cleanWorkerInvalidConnection(&$worker)
改成
function cleanWorkerInvalidConnection($worker)