Ai_GirlFriend/xuniYou/PHP超时问题解决.md
2026-03-02 18:57:11 +08:00

225 lines
5.2 KiB
Markdown
Raw 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.

# 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 服务器超时
**原因:** 多个进程同时运行,端口冲突,连接堆积
**解决:** 停止所有旧进程,重新启动
**状态:** ✅ 已清理,可以重新启动