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