public function onStart()
{
parent::onStart();
if ($this->server->worker_id === 0 && in_array($this->server->setting['dispatch_mode'], [1, 3])) {
# 如果 dispatch_mode 是 1, 3 模式, 开启定期清理数据
swoole_timer_tick(1000 * 60, function () {
foreach (Host::$table as $key => $item) {
$info = $this->server->connection_info($item['fd'], $item['from_id']);
if ($item['removed']) {
if ($info) {
$this->server->close($item['fd'], $item['from_id']);
}
# 移除内存数据
Host::$table->del($key);
} elseif (false === $info) {
# 连接已经关闭
Host::$table->del($key);
# 推送服务器
RPC::factory($item['fd'], $item['from_id'])->trigger('server.remove', $item->group, $item->id);
Server::$instance->debug("remove closed client#{$item['group']}.{$item['id']}: {$item['ip']}:{$item['port']}");
}
}
});
} else {
swoole_timer_tick(1000 * 60, function () {
# 清理移除掉的 server
$time = time();
foreach (Host::$table as $key => $item) {
if ($item['removed'] && $item['removed'] - $time > 10) {
# 清理数据
Host::$table->del($key);
}
}
});
}
}