Назад | Перейти на главную страницу

Проблема с экземпляром AWS EC2 при его подключении к WebSocket

Когда я попытался запустить чат-приложение с локального хоста, подключенного к базе данных 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

Я даже пытался назначить публичный IP и частный IP, но ничего хорошего из этого не вышло?

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

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

Как нам нужно настроить виртуальный сервер для запуска ваших собственных сервисов в экземпляре AWS EC2?

Обновить:

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

Убедитесь, что EC2 Группа безопасности связанный с экземпляром, разрешает доступ ко всем вашим портам, 8282, 8383 и т. д.

Также к какому IP или имени хоста пытается подключиться ваш JS-код? Это публичный / эластичный IP-адрес экземпляра EC2? Так должно быть. Больше ничего работать не будет.

Обычно код JS обращается к тому же серверу, который обслуживал веб-страницу, т.е. если URL-адрес https://www.example.com/ Затем JavaScrips будет подключаться обратно к ws: //www.example.com: 8282 / - не кодируйте жестко имена хостов, вместо этого используйте то, что было использовано в URL-адресе. Это может быть IP-адрес, каноническое имя или какой-то адрес ec2-12-34-56-78.eu-west-2 ..., все это должно работать независимо от того, что вводит пользователь.

Надеюсь, это поможет :)