【问题标题】:An Issue with an AWS EC2 instance WebSocket connection failed: Error in connection establishment: net::ERR_CONNECTION_TIMED_OUTAWS EC2 实例 WebSocket 连接出现问题:连接建立错误:net::ERR_CONNECTION_TIMED_OUT
【发布时间】:2019-03-21 18:18:24
【问题描述】:

当我尝试从连接到 MySQL 数据库的 localhost 运行聊天应用程序时,它是成功的。

此外,当我尝试从登录 SSH 凭据的 PuTTY 终端运行时,它显示为 Server Started with the port# 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

保持 shell 脚本运行,打开几个 Web 浏览器窗口,然后打开一个 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);
};

来自浏览器控制台结果:

到“ws://5.160.195.94:8282/”的 WebSocket 连接失败:错误 连接建立: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();

我什至尝试分配公共 IP 和私有 IP,但是没有用,结果还是一样?

这是执行添加src文件夹$composer require cboden/ratchet后生成的composer文件

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');

来自安全组

  • 在“入站”选项卡下

  • 在“出站”选项卡下

【问题讨论】:

    标签: amazon-web-services amazon-ec2 websocket ratchet phpwebsocket


    【解决方案1】:

    当涉及到 EC2 的连接问题时,您需要检查几件事才能找到根本原因。

    • 通过 SSH 连接到应用程序正在运行的 EC2 实例,并确保您可以从 EC2 实例中访问它。如果它有效,那么它是我们需要解决的与网络相关的问题。
    • 如果步骤 1 成功。您现在已经确定这是一个网络问题,要解决此问题,您需要检查以下内容。
      • 检查是否已创建 Internet 网关并将其连接到您的 VPC。
      • 接下来检查您的子网路由表是否有指向 Internet 网关的默认路由。检查此link 以完成此步骤和上述步骤。
      • 检查您的子网Network ACLs 规则以查看端口是否未被阻止
      • 最后,您需要检查您的实例安全组,如您所示。

    如果您需要通过 EC2 dns 访问,您需要在 public subnet 中配置您的 ec2 实例并分配 elastic IP

    如果问题仍然存在,请检查 EC2 status checks 是否通过,或尝试配置新实例。

    【讨论】:

      猜你喜欢
      • 2019-08-30
      • 1970-01-01
      • 2022-11-24
      • 1970-01-01
      • 1970-01-01
      • 2020-04-29
      • 2017-11-18
      • 2020-08-10
      相关资源
      最近更新 更多