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

5.2 KiB
Raw Blame History

PHP 服务器超时问题解决

🔍 问题诊断结果

发现的问题

  1. 多个 PHP 进程同时运行

    • 发现 2 个 PHP 进程PID: 14076, 22776
    • 都在监听 30100 端口
    • 导致端口冲突和资源竞争
  2. 大量半关闭连接

    • 多个 CLOSE_WAIT 状态的连接
    • 多个 FIN_WAIT_2 状态的连接
    • 说明连接没有正常关闭,资源耗尽
  3. Python 也有多个进程

    • 发现 2 个 Python 进程PID: 12040, 19024
    • 可能是之前启动失败后没有清理

根本原因

重复启动服务导致的端口冲突和资源耗尽:

  • 多次运行启动脚本
  • 旧进程没有正确关闭
  • 新进程无法正常工作
  • 连接堆积导致超时

已执行的修复

已经停止了所有旧的进程:

Stop-Process -Id 14076,22776 -Force  # PHP 进程
Stop-Process -Id 12040,19024 -Force  # Python 进程

端口已完全释放,可以重新启动服务。

🚀 正确的启动流程

方法 1使用启动脚本推荐

启动脚本会自动清理旧进程:

  1. 双击运行 启动项目.bat
  2. 脚本会自动:
    • 检查并终止占用端口的旧进程
    • 等待端口释放
    • 启动 PHP 服务器30100
    • 启动 Python 服务器30101

方法 2手动启动

如果需要手动启动:

  1. 先清理旧进程:
# 查找占用端口的进程
netstat -ano | Select-String ":30100"
netstat -ano | Select-String ":30101"

# 停止进程(替换为实际的 PID
Stop-Process -Id <PID> -Force
  1. 启动 PHP 服务器:
cd xunifriend_RaeeC\public
php -S 0.0.0.0:30100 router.php
  1. 启动 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

问题 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. 验证服务正常:

  3. 测试语音通话:

    • 打开 App
    • 进入语音通话页面
    • 测试功能
  4. 观察日志:

    • 不应该再有 "请求超时" 错误
    • 应该能正常获取用户信息

问题: PHP 服务器超时
原因: 多个进程同时运行,端口冲突,连接堆积
解决: 停止所有旧进程,重新启动
状态: 已清理,可以重新启动