Ai_GirlFriend/xuniYou/PHP超时问题解决.md

225 lines
5.2 KiB
Markdown
Raw Normal View History

2026-03-02 18:57:11 +08:00
# PHP 服务器超时问题解决
## 🔍 问题诊断结果
### 发现的问题
1. **多个 PHP 进程同时运行**
- 发现 2 个 PHP 进程PID: 14076, 22776
- 都在监听 30100 端口
- 导致端口冲突和资源竞争
2. **大量半关闭连接**
- 多个 `CLOSE_WAIT` 状态的连接
- 多个 `FIN_WAIT_2` 状态的连接
- 说明连接没有正常关闭,资源耗尽
3. **Python 也有多个进程**
- 发现 2 个 Python 进程PID: 12040, 19024
- 可能是之前启动失败后没有清理
### 根本原因
**重复启动服务导致的端口冲突和资源耗尽:**
- 多次运行启动脚本
- 旧进程没有正确关闭
- 新进程无法正常工作
- 连接堆积导致超时
## ✅ 已执行的修复
已经停止了所有旧的进程:
```powershell
Stop-Process -Id 14076,22776 -Force # PHP 进程
Stop-Process -Id 12040,19024 -Force # Python 进程
```
端口已完全释放,可以重新启动服务。
## 🚀 正确的启动流程
### 方法 1使用启动脚本推荐
**启动脚本会自动清理旧进程:**
1. 双击运行 `启动项目.bat`
2. 脚本会自动:
- 检查并终止占用端口的旧进程
- 等待端口释放
- 启动 PHP 服务器30100
- 启动 Python 服务器30101
### 方法 2手动启动
**如果需要手动启动:**
1. **先清理旧进程:**
```powershell
# 查找占用端口的进程
netstat -ano | Select-String ":30100"
netstat -ano | Select-String ":30101"
# 停止进程(替换为实际的 PID
Stop-Process -Id <PID> -Force
```
2. **启动 PHP 服务器:**
```cmd
cd xunifriend_RaeeC\public
php -S 0.0.0.0:30100 router.php
```
3. **启动 Python 服务器:**
```cmd
python -m uvicorn lover.main:app --host 0.0.0.0 --port 30101 --reload
```
## 🔧 避免问题的最佳实践
### 1. 启动前检查
**每次启动前先检查端口:**
```powershell
netstat -ano | Select-String ":30100"
netstat -ano | Select-String ":30101"
```
如果有输出,说明端口被占用,需要先停止旧进程。
### 2. 正确停止服务
**不要直接关闭窗口,而是:**
- 在服务器窗口中按 `Ctrl+C`
- 等待服务正常退出
- 或者使用任务管理器结束进程
### 3. 使用启动脚本
**启动脚本的优势:**
- 自动检测并清理旧进程
- 自动等待端口释放
- 在独立窗口中运行,便于查看日志
- 出错时容易定位问题
### 4. 定期清理
**如果遇到问题,可以手动清理:**
```powershell
# 停止所有 PHP 进程
Get-Process | Where-Object {$_.ProcessName -eq "php"} | Stop-Process -Force
# 停止所有 Python 进程(注意:会停止所有 Python 程序)
Get-Process | Where-Object {$_.ProcessName -eq "python"} | Stop-Process -Force
```
## 📊 验证服务是否正常
### 1. 检查进程
```powershell
# 应该只有 1 个 PHP 进程
Get-Process | Where-Object {$_.ProcessName -eq "php"}
# 应该只有 1 个 Python 进程(或 2 个,如果有其他 Python 程序)
Get-Process | Where-Object {$_.ProcessName -eq "python"}
```
### 2. 检查端口
```powershell
# 应该只有 1 个 LISTENING 状态
netstat -ano | Select-String ":30100" | Select-String "LISTENING"
netstat -ano | Select-String ":30101" | Select-String "LISTENING"
```
### 3. 测试访问
**PHP 服务器:**
```
http://127.0.0.1:30100/test_api.php
```
**Python 服务器:**
```
http://127.0.0.1:30101/docs
```
## 🐛 常见问题
### 问题 1启动脚本无法清理旧进程
**症状:**
- 启动脚本运行后还是有多个进程
- 端口还是被占用
**解决:**
手动停止所有进程:
```powershell
Get-Process | Where-Object {$_.ProcessName -eq "php"} | Stop-Process -Force
Get-Process | Where-Object {$_.ProcessName -eq "python"} | Stop-Process -Force
```
### 问题 2PHP 服务器启动后立即退出
**症状:**
- PHP 窗口一闪而过
- 端口没有被监听
**可能原因:**
- PHP 路径配置错误
- router.php 文件不存在
- 端口被其他程序占用
**解决:**
1. 检查 `启动项目.bat` 中的 `PHP_PATH` 配置
2. 确认 `xunifriend_RaeeC\public\router.php` 存在
3. 尝试手动启动查看错误信息
### 问题 3Python 服务器无法连接 PHP
**症状:**
- Python 日志显示 "请求超时"
- PHP 服务器正常运行
**可能原因:**
- PHP 服务器响应慢
- 防火墙阻止本地连接
- PHP 代码有错误
**解决:**
1. 在浏览器中测试 PHP 接口:
```
http://127.0.0.1:30100/api/user_basic/get_user_basic
```
2. 查看 PHP 服务器窗口的错误日志
3. 检查 PHP 代码是否有语法错误
## 📝 下一步
现在所有旧进程已清理,请:
1. **重新启动服务:**
- 双击运行 `启动项目.bat`
- 或者手动启动 PHP 和 Python 服务器
2. **验证服务正常:**
- 访问 http://127.0.0.1:30100
- 访问 http://127.0.0.1:30101/docs
3. **测试语音通话:**
- 打开 App
- 进入语音通话页面
- 测试功能
4. **观察日志:**
- 不应该再有 "请求超时" 错误
- 应该能正常获取用户信息
---
**问题:** PHP 服务器超时
**原因:** 多个进程同时运行,端口冲突,连接堆积
**解决:** 停止所有旧进程,重新启动
**状态:** ✅ 已清理,可以重新启动