## 问题分析

通过代码分析，我发现/api/top-clients端点数据无法持久化的原因有两个：

1. **数据保存逻辑缺失**：在`saveStatsData`方法中，虽然`StatsData`结构体包含了`ClientStats`字段，但没有将`server.clientStats`赋值给`statsData.ClientStats`

2. **数据加载逻辑缺失**：在`loadStatsData`方法中，虽然`StatsData`结构体包含了`ClientStats`字段，但没有将`statsData.ClientStats`赋值给`server.clientStats`

3. **自动保存功能未启用**：`startAutoSave`方法没有在`Server`的`Start`方法中被调用，导致数据不会定期保存

## 修复计划

1. **修改`saveStatsData`方法**：添加保存`ClientStats`数据的逻辑
2. **修改`loadStatsData`方法**：添加加载`ClientStats`数据的逻辑
3. **在`Server.Start`方法中调用`startAutoSave`**：确保数据定期保存

## 修复步骤

### 步骤1：修改`saveStatsData`方法
在`dns/server.go`文件中，修改`saveStatsData`方法，添加保存`ClientStats`数据的逻辑：

```go
// 复制客户端统计数据
s.clientStatsMutex.RLock()
statsData.ClientStats = make(map[string]*ClientStats)
for k, v := range s.clientStats {
    statsData.ClientStats[k] = v
}
s.clientStatsMutex.RUnlock()
```

### 步骤2：修改`loadStatsData`方法
在`dns/server.go`文件中，修改`loadStatsData`方法，添加加载`ClientStats`数据的逻辑：

```go
s.clientStatsMutex.Lock()
if statsData.ClientStats != nil {
    s.clientStats = statsData.ClientStats
}
s.clientStatsMutex.Unlock()
```

### 步骤3：在`Server.Start`方法中调用`startAutoSave`
在`dns/server.go`文件的`Start`方法中，添加调用`startAutoSave`的代码：

```go
// 启动自动保存功能
go s.startAutoSave()
```

## 预期效果

修复后，/api/top-clients端点的数据将：
1. 在服务器启动时从文件加载
2. 定期自动保存到文件
3. 在服务器停止时最后保存一次

这样就能确保/api/top-clients端点的数据持久化，不会因为服务器重启而丢失。