WebSocket连接失败:连接建立错误:net :: ERR_CONNECTION_TIMED_OUT

时间:2019-04-09 14:21:15

标签: php websocket ratchet

伙计们

我正在使用棘轮构建聊天应用程序并将数据保存到mysql数据库。在localhost上,一切正常,并建立了连接。

现在我已将应用程序加载到实时服务器上并使用SSH(Putty)登录,然后导航至php bin/chat-server.php,然后在浏览器控制台上收到此错误:

  

与'wss://donorgametes.com:8080 /'的WebSocket连接失败:错误   在连接建立中:net :: ERR_CONNECTION_TIMED_OUT

这是我到应用程序的网址

https://donorgametes.com/MyApp/

我的代码:

<script>
    var conn = new WebSocket('wss://donorgametes.com:8080');
    conn.onopen = function (e) {
        console.log("Connection established!");

    };

    conn.onmessage = function (e) {
        showMessage(e.data, 'Others');
    };

    document.querySelector('#chat-form').addEventListener('submit', function (e) {
        e.preventDefault();

        var messageElement = document.querySelector('#message');
        var message = messageElement.value;

        var messageData = {
            'userId': '12',
            'content': message
        }
        var messageDataJson = JSON.stringify(messageData);

        conn.send(JSON.stringify(messageDataJson));
        showMessage(message, 'Me');
        messageElement.value = '';
    });

    function showMessage(msg, sender) {
        var messageItem = document.createElement('li');
        var className = 'list-group-item';

        if (messageItem.classList)
            messageItem.classList.add(className);
        else
            messageItem.className += ' ' + className;

        messageItem.innerHTML = '<strong>' + sender + ': </strong>' + msg;
        document.querySelector('#chat-area > ul').appendChild(messageItem);
    }
</script>

聊天服务器

use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use MyApp\Chat;

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

$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new Chat()
        )
    ),
    8080
);

$server->run();

如何在实时服务器上运行它并获得连接?我必须遵循什么步骤?

2 个答案:

答案 0 :(得分:1)

检查您的应用程序页面源之后,我发现您正在使用localhost进行第38行的连接

var conn = new WebSocket('wss://localhost:8080');

错了,您应该使用自己的域名。

第二件事是检查您域上的端口转发后,我发现端口8080现在被阻止了。因此,您最好让托管服务提供商在IPTABLES中打开端口以进行传入连接,或者如果您具有root用户访问权限,请尝试使用Article,这可能有助于您允许端口伪装。

答案 1 :(得分:0)

在您的站点上,您正在使用其他端口(35814)。
因此,设置正确的参数可能会有些混乱。

<script>
    var conn = new WebSocket('wss://donorgametes.com:35814');
    conn.onopen = function (e) {
        console.log("Connection established!");

    };

    conn.onmessage = function (e) {
        showMessage(e.data, 'Others');
    };

    document.querySelector('#chat-form').addEventListener('submit', function (e) {
        e.preventDefault();

        var messageElement = document.querySelector('#message');
        var message = messageElement.value;

        var messageData = {
            'userId': '12',
            'content': message
        }
        var messageDataJson = JSON.stringify(messageData);

        conn.send(JSON.stringify(messageDataJson));
        showMessage(message, 'Me');
        messageElement.value = '';
    });

    function showMessage(msg, sender) {
        var messageItem = document.createElement('li');
        var className = 'list-group-item';

        if (messageItem.classList)
            messageItem.classList.add(className);
        else
            messageItem.className += ' ' + className;

        messageItem.innerHTML = '<strong>' + sender + ': </strong>' + msg;
        document.querySelector('#chat-area > ul').appendChild(messageItem);
    }
</script>

显示的错误适合脚本中的端口:

  

(索引):38 Web套接字与'wss://donorgametes.com:35814 /'的连接失败:连接建立错误:net :: ERR_CONNECTION_TIMED_OUT