GameServerManager/docs/网络检测功能说明.md
2025-10-16 11:15:55 +08:00

401 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 网络检测功能说明
## 功能概述
网络检测模块用于检测 GSManager 面板所依赖的各类在线服务的连接状态,帮助用户快速诊断网络问题。该模块集成在首页中,支持一键检测所有服务或单独检测特定服务。
## 功能特性
### 1. 检测方式
- **TCP Ping**:通过建立 TCP 连接测试服务可达性
- **HTTP/HTTPS Ping**:通过 HTTP 请求测试 Web 服务可用性
- **超时设置**:默认超时时间为 10 秒
- **响应时间显示**:显示每个服务的响应延迟
### 2. 检测范围
#### 互联网连接
- **百度**www.baidu.com
- 用途:验证外网连接状态
- 影响无法对外请求时Steam 游戏等需要联网的服务端会受影响
#### Steam 网络
- **Steamworks API全球**api.steampowered.com
- 用途Steam 游戏服务端联网功能
- 影响无法连接时Steam 游戏服务端可能无法被搜索或通过 Steam 网络连接
- **Steamworks API合作/私有)**partner.steam-api.com
- 用途Steam 合作伙伴 API
- 影响:同上
#### Modrinth
- **Modrinth API**api.modrinth.com
- 用途:搜索 Minecraft 整合包
- 影响:无法搜索 MC 整合包
- **Modrinth CDN**cdn.modrinth.com
- 用途:下载 Minecraft 整合包
- 影响:无法下载 MC 整合包
#### Minecraft
- **Mojang 会话服务器**sessionserver.mojang.com
- 用途:正版验证
- 影响:正版玩家可能无法进服
- **MSL API**https://api.mslmc.cn/v3
- 用途:部署 MC 核心
- 影响:无法部署 MC 核心
#### GSManager
- **GSManager 在线部署服务**http://gsm.server.xiaozhuhouses.asia:10002/
- 用途:在线部署和赞助者密钥功能
- 影响:无法使用在线部署和赞助者密钥功能
- **GSManager 镜像服务器**http://download.server.xiaozhuhouses.asia:8082/
- 用途:环境管理中的加速下载
- 影响:无法使用加速下载功能
### 3. UI 功能
#### 网络状态横幅
- **全部正常**:显示绿色横幅提示"网络正常且无阻您可以畅快使用GSManager中所有在线服务"
- **部分异常**:显示黄色横幅提示"部分网络服务连接异常,可能影响相关功能的使用"
- **可关闭**:用户可以点击关闭横幅
#### 检测按钮
- **检测所有**:一键检测所有网络服务
- 检测中显示转圈加载图标
- 所有项目同时显示检测中状态
- **单项检测**:点击每个项目右侧的"检测"按钮
- 仅检测当前项目
- 检测中显示转圈加载图标
#### 分类显示
- **可折叠设计**:每个分类可以展开/折叠
- **分类状态图标**
- 🔵 检测中:转圈加载图标
- ✅ 全部成功:绿色对勾
- ❌ 存在失败:红色叉号
- ⚠️ 未检测:灰色提示图标
- **统计显示**:显示每个分类的成功数量/总数
#### 项目状态
- **状态图标**
- 🔵 `checking`:蓝色转圈加载
-`success`:绿色对勾
-`failed`:红色叉号
- ⚠️ `pending`:灰色提示图标
- **响应时间**成功时显示响应延迟ms
- **错误提示**:失败时悬停显示详细错误信息
### 4. 自动检测
- **首次加载**:用户进入首页时自动执行一次全面检测
- **手动检测**:其他时候需要用户主动点击检测按钮
## 技术实现
### 前端实现
#### 1. 类型定义(`client/src/types/index.ts`
```typescript
// 网络检测项
export interface NetworkCheckItem {
id: string
name: string
url: string
status: 'pending' | 'checking' | 'success' | 'failed'
responseTime?: number
errorMessage?: string
lastCheckTime?: string
}
// 网络检测分类
export interface NetworkCheckCategory {
id: string
name: string
items: NetworkCheckItem[]
}
// 网络检测状态管理
export interface NetworkCheckState {
categories: NetworkCheckCategory[]
allChecksComplete: boolean
allChecksPassed: boolean
checking: boolean
lastCheckTime?: string
checkAll: () => Promise<void>
checkSingle: (categoryId: string, itemId: string) => Promise<void>
reset: () => void
}
```
#### 2. 状态管理(`client/src/stores/networkCheckStore.ts`
使用 Zustand 进行状态管理,主要方法:
- **`checkAll()`**:检测所有项目
- 立即将所有项目状态设为 `checking`
- 调用 API 进行批量检测
- 更新所有项目的检测结果
- **`checkSingle(categoryId, itemId)`**:检测单个项目
- 将指定项目状态设为 `checking`
- 调用 API 进行单项检测
- 更新该项目的检测结果
- **`reset()`**:重置所有检测状态
#### 3. API 客户端(`client/src/utils/api.ts`
```typescript
// 检测所有网络服务
async checkNetwork() {
return this.get('/network/check-all')
}
// 检测单个网络服务
async checkSingleNetwork(url: string) {
return this.post('/network/check-single', { url })
}
```
#### 4. UI 组件(`client/src/components/NetworkCheck.tsx`
组件功能:
- 网络状态横幅显示
- 检测按钮(全部/单项)
- 分类折叠展开
- 状态图标动态显示
- 响应时间格式化
- 错误提示悬浮显示
### 后端实现
#### 1. 路由注册(`server/src/index.ts`
```typescript
import networkRouter from './routes/network.js'
app.use('/api/network', networkRouter)
```
#### 2. 检测路由(`server/src/routes/network.ts`
主要功能:
##### TCP Ping 实现
```typescript
function tcpPing(host: string, port: number, timeout: number): Promise<Result>
```
- 使用 `net.Socket` 建立 TCP 连接
- 测量连接建立时间
- 支持超时控制
##### HTTP/HTTPS Ping 实现
```typescript
function httpPing(url: string, timeout: number): Promise<Result>
```
- 使用 `http`/`https` 模块发送 GET 请求
- 自动识别 HTTP/HTTPS 协议
- 测量请求响应时间
- 支持超时控制
##### 检测接口
**检测所有服务**
```
GET /api/network/check-all
```
返回示例:
```json
{
"success": true,
"data": {
"results": [
{
"id": "baidu",
"name": "互联网连接状态",
"url": "www.baidu.com",
"status": "success",
"responseTime": 45
}
],
"timestamp": "2024-01-01T00:00:00.000Z"
}
}
```
**检测单个服务**
```
POST /api/network/check-single
Body: { "url": "www.baidu.com" }
```
返回示例:
```json
{
"success": true,
"data": {
"url": "www.baidu.com",
"status": "success",
"responseTime": 45,
"timestamp": "2024-01-01T00:00:00.000Z"
}
}
```
## 页面位置
### 首页完整检测模块
网络检测模块位于首页HomePage布局顺序
1. 日期时间和天气显示
2. 欢迎信息
3. 系统信息卡片
4. 系统状态CPU、内存、磁盘、网络使用率
5. **🆕 网络检测模块** ← 在这里
6. 终端占用、活跃端口、活跃进程
### 游戏部署页面状态横幅
在游戏部署页面的各个标签页顶部添加了网络状态横幅:
1. **SteamCMD 标签页** - 显示 Steam 网络状态Steamworks API
2. **Minecraft 部署标签页** - 显示 MSL API 连接状态
3. **Minecraft 整合包部署标签页** - 显示 Modrinth 网络状态API + CDN
4. **在线部署标签页** - 显示 GSManager 在线部署服务状态
## 使用方法
### 1. 首次进入
- 打开 GSManager 面板
- 登录后进入首页
- 系统自动执行网络检测
- 查看横幅和各项检测结果
### 2. 手动检测
- 点击"检测所有"按钮:检测所有网络服务
- 点击单项"检测"按钮:检测特定网络服务
- 点击分类标题:展开/折叠分类详情
### 3. 查看结果
- **绿色对勾**:服务连接正常,显示响应时间
- **红色叉号**:服务连接失败,悬停查看错误原因
- **转圈图标**:正在检测中
- **灰色图标**:尚未检测
## 故障排查
### 检测失败常见原因
1. **防火墙限制**
- 检查服务器防火墙规则
- 确保允许出站连接
2. **网络问题**
- 检查服务器网络连接
- 测试 DNS 解析是否正常
3. **服务不可用**
- 目标服务可能临时维护
- 使用备用服务或稍后重试
4. **超时设置**
- 默认超时 10 秒
- 网络较慢时可能超时
### 调试方法
1. **查看浏览器控制台**
- 检查 API 请求是否成功
- 查看详细错误信息
2. **查看服务器日志**
- 检查 `server/logs/combined.log`
- 查找网络检测相关错误
3. **手动测试**
- 在服务器上使用 `ping``curl` 测试连接
- 验证网络是否畅通
## 注意事项
1. **认证要求**
- 所有检测接口需要用户登录认证
- 使用 `authenticateToken` 中间件
2. **性能考虑**
- 检测操作并发执行
- 默认超时 10 秒,避免长时间等待
3. **错误处理**
- 单个服务失败不影响其他服务检测
- 所有错误都会被捕获并显示
4. **隐私安全**
- 仅检测连接状态,不传输敏感数据
- 使用标准的网络协议
## 网络状态横幅组件
### 组件说明
`NetworkStatusBanner` 是一个可复用的网络状态横幅组件,用于在特定页面显示相关网络服务的连接状态。
### 特性
1. **自动检测** - 首次加载时自动检测网络状态
2. **状态显示** - 实时显示网络连接状态
3. **一键重测** - 支持手动重新检测
4. **可关闭** - 用户可以关闭横幅
5. **淡入动画** - 平滑的淡入淡出动画效果
6. **详细信息** - 多项目时显示详细的各项状态
### 使用方法
```tsx
// 显示整个分类的所有项目
<NetworkStatusBanner categoryId="steam" autoCheck={true} />
// 只显示分类中的某一个项目
<NetworkStatusBanner categoryId="minecraft" itemId="msl-api" autoCheck={true} />
```
### 参数说明
- `categoryId` - 分类ID可选值`internet``steam``modrinth``minecraft``gsmanager`
- `itemId` - 项目ID可选如果指定则只显示该项
- `autoCheck` - 是否首次加载时自动检测,默认为 `false`
## 相关文件
### 前端文件
- `client/src/types/index.ts` - 类型定义
- `client/src/stores/networkCheckStore.ts` - 状态管理
- `client/src/components/NetworkCheck.tsx` - 完整检测 UI 组件
- `client/src/components/NetworkStatusBanner.tsx` - 状态横幅组件(新增)
- `client/src/utils/api.ts` - API 客户端
- `client/src/pages/HomePage.tsx` - 首页集成
- `client/src/pages/GameDeploymentPage.tsx` - 游戏部署页面集成
### 后端文件
- `server/src/routes/network.ts` - 网络检测路由
- `server/src/routes/index.ts` - 路由注册
- `server/src/index.ts` - 服务器主文件
- `server/src/middleware/auth.ts` - 认证中间件
## 技术栈
- **前端**React、TypeScript、Zustand、Tailwind CSS、Lucide Icons
- **后端**Node.js、Express、TypeScript
- **网络**netTCP、http/httpsHTTP
## 开发者
如需修改或扩展网络检测功能,请参考以上技术实现部分,按照现有代码结构进行开发。
---