You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在DigitalOcean App Platform部署PHP Ratchet WebSocket服务器连接失败求助

解决DigitalOcean App Platform部署PHP Ratchet WebSocket服务器连接错误

核心问题分析

你的启动命令heroku-php-apache2 && php startServer.php存在致命问题:heroku-php-apache2是阻塞式进程,会一直占用前台运行,导致后面的php startServer.php永远不会执行。此外,硬编码端口、监听地址限制、WSS路由配置也可能是连接失败的诱因。

具体修复步骤

1. 修正启动命令,确保双进程正常运行

将启动命令改为后台启动Ratchet,再运行Apache(前台进程保持应用存活):

php startServer.php & heroku-php-apache2

或者用更可靠的启动脚本方式:

  1. 在项目根目录创建start.sh文件:
#!/bin/bash
# 后台启动Ratchet WebSocket服务器
php startServer.php &
# 启动Apache托管客户端页面
heroku-php-apache2
  1. 给脚本添加执行权限(提交到Git前执行,或在部署构建命令中添加):
chmod +x start.sh
  1. 将DO App Platform的启动命令改为:
./start.sh

2. 动态读取端口,适配DO环境

DigitalOcean会通过PORT环境变量分配端口,不能硬编码8080。修改startServer.php:

use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use MySocketServer;

require dirname(__DIR__) . '/vendor/autoload.php';

// 读取环境变量端口,本地测试 fallback 到8080
$port = getenv('PORT') ?: 8080;
// 监听所有外部可访问的接口(必须是0.0.0.0,不能是localhost)
$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new MySocketServer()
        )
    ),
    $port,
    '0.0.0.0'
);

echo "WebSocket server running on port {$port}\n";
$server->run();

3. 确认WSS连接路径配置

  • 客户端连接地址需改为wss://你的域名/(如果Ratchet根路径处理WebSocket),或wss://你的域名/ws(如果设置了路由前缀)。
  • 若使用RouteProvider配置路由,确保路径匹配:
use Ratchet\App;

$app = new App('你的域名', $port, '0.0.0.0');
$app->route('/ws', new MySocketServer(), ['*']);
$app->run();

此时客户端连接地址应为wss://你的域名/ws。

4. 排查日志定位问题

  • 查看DigitalOcean App Platform的运行日志,确认Ratchet是否成功启动(搜索WebSocket server running关键字)。
  • 打开浏览器控制台,查看WebSocket连接的具体错误:
    • 错误代码1006:连接异常关闭,通常是服务器未启动或端口/地址配置错误。
    • 连接超时:服务器未监听0.0.0.0,或端口未正确映射。

5. 确保依赖已正确安装

在DO App Platform的构建命令中添加composer install --no-dev,确保Ratchet依赖被正确安装:

composer install --no-dev

内容的提问来源于stack exchange,提问作者user2342558

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 15:01:02