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

VPS部署Ratchet+ReactPHP WebSocket服务器:端口占用自动重启及WSS连接失败问题求助

VPS部署Ratchet+ReactPHP WebSocket服务器:端口占用自动重启及WSS连接失败问题求助

我现在在VPS上用Ratchet和ReactPHP搭建WebSocket聊天服务器,碰到了两个棘手的问题,实在搞不定来求助大家!

首先是端口被占的问题:执行server.php启动服务器时,直接弹出致命错误:

PHP Fatal error:
Uncaught RuntimeException:
Failed to listen on "tcp://0.0.0.0:2053":
Address already in use (EADDRINUSE)
in /var/www/meetwithchat/vendor/react/socket/src/TcpServer.php:188

更奇怪的是,我找到占用2053端口的进程杀掉之后,马上就有新的进程自动重启并绑定这个端口,根本没法释放出端口给我的服务器程序用。

然后就是客户端连接失败的问题,Chrome浏览器控制台里一直刷这个错误:

WebSocket connection to 'wss://meetwithchat.com:2053/' failed:

下面是我的相关代码:

服务器代码 server.php

<?php
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
require __DIR__ . '/vendor/autoload.php';

class ChatServer implements MessageComponentInterface {
    // [Properties and constructor omitted for brevity]

    public function onOpen(ConnectionInterface $conn) {
        // [Code omitted for brevity]
    }

    public function onMessage(ConnectionInterface $from, $msg) {
        // [Code omitted for brevity]
    }

    // Additional methods (matchUsers, endChatForBoth, onClose, onError)...
}

// Create the event loop
$loop = React\EventLoop\Factory::create();

// Set up the SSL context
$context = [
    'ssl' => [
        'local_cert' => '/etc/ssl/certs/cloudflare_origin.crt',
        'local_pk'   => '/etc/ssl/private/cloudflare_origin.key',
        'allow_self_signed' => true,
        'verify_peer' => false
    ]
];

// Create a TCP socket listening on all interfaces on port 2053
$socket = new React\Socket\Server('0.0.0.0:2053', $loop);
// Wrap it with SSL
$secureSocket = new React\Socket\SecureServer($socket, $loop, $context);

// Set up the WebSocket server
$server = new Ratchet\Server\IoServer(
    new Ratchet\Http\HttpServer(
        new Ratchet\WebSocket\WsServer(
            new ChatServer()
        )
    ),
    $secureSocket,
    $loop
);

error_log("Secure WebSocket server is running on port 2053...");
$server->run();
?>

客户端代码 script.js

let ws = new WebSocket("wss://meetwithchat.com:2053/");

ws.onopen = function () {
    // Send initial messages to set gender and preference
    ws.send(JSON.stringify({ type: "setGender", gender: genderValue }));
    ws.send(JSON.stringify({ type: "setPreference", preference: preferenceValue }));
};

ws.onmessage = function (event) {
    const data = JSON.parse(event.data);
    if (data.type === "match") {
        // Handle a successful match
    } else if (data.type === "message") {
        // Append message to chat UI
    } else if (data.type === "chatEnded") {
        alert("Partner has left the chat. Chat ended!");
        resetChat();
    }
};

ws.onclose = function () {
    resetChat();
};

备注:内容来源于stack exchange,提问作者Mustafa Uğur Baskın

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 10:08:01