Ошибка с соединением WebSocket экземпляра AWS EC2: ошибка при установлении соединения: net :: ERR_CONNECTION_TIMED_OUT - PullRequest
0 голосов
/ 17 октября 2018

Когда я попытался запустить приложение чата с локального хоста, подключенного к базе данных MySQL, которая была закодирована с помощью PHP через WebSocket, это оказалось успешным.

Также, когда я попытался запустить с терминала PuTTY, вошедшего в учетные данные SSH,он отображался как сервер запущен с портом # 8080

ubuntu@ec3-193-123-96:/home/admin/web/ec3-193-123-96.eu-central-1.compute.amazonaws.com/public_html/application/libraries/server$ php websocket_server.php
PHP Fatal error: Uncaught React\Socket\ConnectionException: Could not bind to tcp://0.0.0.0:8080: Address already in use in /home/admin/web/ec3-193-123-96.eu-central-1.compute.amazonaws.com/public_html/application/libraries/vendor/react/socket/src/Server.php:29
Stack trace:
#0 /home/admin/web/ec3-193-123-96.eu-central-1.compute.amazonaws.com/public_html/application/libraries/vendor/cboden/ratchet/src/Ratchet/Server/IoServer.php(70): React\Socket\Server->listen(8080, '0.0.0.0')
#1 /home/admin/web/ec3-193-123-96.eu-central-1.compute.amazonaws.com/public_html/application/libraries/server/websocket_server.php(121): Ratchet\Server\IoServer::factory(Object(Ratchet\Http\HttpServer), 8080)
#2 {main}
thrown in /home/admin/web/ec3-193-123-96.eu-central-1.compute.amazonaws.com/public_html/application/libraries/vendor/react/socket/src/Server.php on line 29
ubuntu@ec3-193-123-96:/home/admin/web/ec3-193-123-96.eu-central-1.compute.amazonaws.com/public_html/application/libraries/server$

Поэтому я попытался изменить порт # 8080 на порт # 8282, он прошел успешно

ubuntu@ec3-193-123-96:/home/admin/web/ec3-193-123-96.eu-central-1.compute.amazonaws.com/public_html/application/libraries/server$ php websocket_server.php

Сохранение сценария оболочкипри запуске откройте несколько окон веб-браузера и откройте консоль Javascript или страницу со следующим Javascript:

var conn = new WebSocket('ws://0.0.0.0:8282');
conn.onopen = function(e) {
    console.log("Connection established!");
};

conn.onmessage = function(e) {
    console.log(e.data);
};

Из результатов консоли браузера:

Соединение WebSocket с'ws: //5.160.195.94: 8282 /' не удалось: ошибка при установлении соединения: net :: ERR_CONNECTION_TIMED_OUT

websocket_server.php

<?php
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()
    )
   ),
   8282
);
$server->run();

Я даже пытался назначить Public IP и Private IP, но безрезультатно, что это привело к тому же старому результату?

Это были файлы композитора, сгенерированные после выполнения и добавления src fстарше $composer require cboden/ratchet

composer.json (на AmazonWebServer)

{
    "autoload": {
        "psr-4": {
            "MyApp\\": "src"
        }
    },
    "require": {
        "cboden/ratchet": "^0.4.1"
    }
}

composer.json (на локальном хосте)

{
    "autoload": {
        "psr-4": {
            "MyApp\\": "src"
        }
    },
    "require": {
        "cboden/ratchet": "^0.4.3"
    }
}

Как мне разрешить / преодолеть при подключении его из WebSocket, особенно с хост-сервера с таким доменным именем, как http://ec3 -193-123-96.eu-central-1.compute.amazonaws.com/

var conn = new WebSocket('ws://localhost:8282');

Из группы безопасности

  • На вкладке Входящие enter image description here

  • На вкладке Outbound enter image description here

1 Ответ

0 голосов
/ 17 октября 2018

Когда возникает проблема с подключением к EC2, нужно найти несколько вещей, которые необходимо проверить, чтобы найти основную причину.

  • SSH в экземпляре EC2, в котором запущено приложение, и убедитесь, что выможет получить к нему доступ из экземпляра EC2.Если это работает, то это проблема, связанная с сетью, которую мы должны решить.
  • Если шаг 1 был успешным.Теперь вы определили, что это проблема сети, для решения которой вам необходимо проверить следующее.
    • Проверьте, создан ли интернет-шлюз и подключен ли он к вашему VPC.
    • Затем проверьте, есть ли в таблице маршрутизации подсетей маршрут по умолчанию, указывающий на интернет-шлюз.проверьте эту ссылку , чтобы завершить этот и предыдущий шаги.
    • Проверьте свои подсети Сетевые ACL правила, чтобы увидеть, не заблокированы ли порты
    • наконец,Вы хотели бы проверить свою группу безопасности экземпляров, как вы показали.

Если вам нужен доступ через днс EC2, вам нужно будет подготовить свой экземпляр ec2 в общедоступной подсети и назначьте эластичный IP

Если проблема все еще существует, проверьте, прошла ли проверка EC2 , или попробуйте подготовить новый экземпляр.

...