package main import ( "fmt" "net" "time" ) // LatencyInfo 延迟信息 type LatencyInfo struct { ClientToServer float64 `json:"clientToServer"` // 客户端到服务器延迟(ms),由前端计算 External map[string]string `json:"external"` // 外部网站延迟 } // checkExternalLatency 检测外部网站延迟 func checkExternalLatency(host string, timeout time.Duration) string { start := time.Now() // 尝试 TCP 连接 80 端口 conn, err := net.DialTimeout("tcp", host+":80", timeout) if err != nil { // 如果 80 端口失败,尝试 443 (HTTPS) conn, err = net.DialTimeout("tcp", host+":443", timeout) if err != nil { return "超时" } } defer conn.Close() latency := time.Since(start).Milliseconds() // 检查是否超时(超过超时时间的一半就认为可能有问题) if latency > timeout.Milliseconds()/2 { return "超时" } return fmt.Sprintf("%d ms", latency) } // readExternalLatencies 读取外部网站延迟 func readExternalLatencies() map[string]string { latencies := make(map[string]string) timeout := 3 * time.Second // 检测百度 latencies["baidu.com"] = checkExternalLatency("baidu.com", timeout) // 检测谷歌 latencies["google.com"] = checkExternalLatency("google.com", timeout) // 检测 GitHub latencies["github.com"] = checkExternalLatency("github.com", timeout) return latencies }