AWS EC2 实例 WebSocket 连接失败的问题:连接建立错误:net::ERR_CONNECTION_TIMED_OUT [英] An Issue with an AWS EC2 instance WebSocket connection failed: Error in connection establishment: net::ERR_CONNECTION_TIMED_OUT

查看:260
本文介绍了AWS EC2 实例 WebSocket 连接失败的问题:连接建立错误:net::ERR_CONNECTION_TIMED_OUT的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试从连接到 MySQL 数据库的 localhost 运行聊天应用程序时,该数据库已通过 WebSocket 用 PHP 编码,它成功了.

此外,当我尝试从 PuTTY 终端运行登录到 SSH 凭据时,它显示为 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.phpPHP 致命错误:未捕获的 ReactSocketConnectionException:无法绑定到 tcp://0.0.0.0:8080:地址已在/home/admin/web/ec3-193-123-96.eu-central-1 中使用.compute.amazonaws.com/public_html/application/libraries/vendor/react/socket/src/Server.php:29堆栈跟踪:#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): ReactSocketServer->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):RatchetServerIoServer::工厂(对象(棘轮HttpHttpServer),8080)#2 {主要}在第 29 行的/home/admin/web/ec3-193-123-96.eu-central-1.compute.amazonaws.com/public_html/application/libraries/vendor/react/socket/src/Server.php 中抛出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 = 函数(e){console.log("连接建立!");};conn.onmessage = 函数(e){控制台日志(电子数据);};

来自浏览器控制台结果:

<块引用>

WebSocket 连接到ws://5.160.195.94:8282/"失败:错误连接建立:net::ERR_CONNECTION_TIMED_OUT

websocket_server.php

run();

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

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

composer.json(在 AmazonWebServer 上)

<代码>{自动加载":{psr-4":{"MyApp\": "src"}},要求": {cboden/棘轮":^0.4.1"}}

composer.json(本地主机)

<代码>{自动加载":{psr-4":{"MyApp\": "src"}},要求": {cboden/棘轮":^0.4.3"}}

从 WebSocket 连接它时,我应该如何解决/克服它,尤其是从具有域名的托管服务器,例如

  • 在出站选项卡下

  • 解决方案

    当涉及到 EC2 的连接问题时,您只需检查几件事即可找到根本原因.

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

    如果您需要通过 EC2 dns 进行访问,则需要在 公共子网 并分配一个弹性IP

    如果问题仍然存在,请检查 EC2 状态检查通过,或尝试配置新实例.

    As I tried to run the chat app from localhost connected to MySQL database which had been coded with PHP via WebSocket it was successful.

    Also when I tried to run from the PuTTY terminal logged into SSH credentials, it was displaying as 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 ReactSocketConnectionException: 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): ReactSocketServer->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): RatchetServerIoServer::factory(Object(RatchetHttpHttpServer), 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$
    

    So I tried to change the port#8080 to port# 8282, it was successful

    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
    

    Keeping the shell script running, open a couple of web browser windows, and open a Javascript console or a page with the following 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);
    };
    

    From the browser console results:

    WebSocket connection to 'ws://5.160.195.94:8282/' failed: Error in connection establishment: net::ERR_CONNECTION_TIMED_OUT

    websocket_server.php

    <?php
    use RatchetServerIoServer;
    use RatchetHttpHttpServer;
    use RatchetWebSocketWsServer;
    use MyAppChat;
    
    require dirname(__DIR__) . '/vendor/autoload.php';
    
    $server = IoServer::factory(
       new HttpServer(
         new WsServer(
              new Chat()
        )
       ),
       8282
    );
    $server->run();
    

    I even tried to assign Public IP and Private IP, but with no good it resulted in the same old result?

    This was the composer files generated after executing and adding src folder $composer require cboden/ratchet

    composer.json(On AmazonWebServer)

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

    composer.json(On localhost)

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

    How am I suppose to resolve/overcome while connecting it from the WebSocket especially from the hosted server with the domain name such as http://ec3-193-123-96.eu-central-1.compute.amazonaws.com/

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

    From the Security Group

    • Under Inbound tab

    • Under Outbound tab

    解决方案

    When it comes to a connectivity issue with an EC2 there are few things you need to check to find the root cause.

    • SSH into the EC2 instance that the application is running and make sure you can access it from within the EC2 instance. If it works then its a network related issue that we need to solve.
    • If step 1 was successful. You have now identified it is a network issue to solve this you need to check the following.
      • Check if an Internet Gateway is created and attached to your VPC.
      • Next check if your subnets routing table has its default route pointing to the internet gateway. check this link to complete this and the above step.
      • Check your subnets Network ACLs rules to see if ports are not blocked
      • finally, you would want to check your Instances Security group as you have shown.

    If you need access via a EC2 dns you will need to provision your ec2 instance in a public subnet and assign an elastic IP

    If an issue still exists check if the EC2 status checks pass, or try provisioning a new instance.

    这篇关于AWS EC2 实例 WebSocket 连接失败的问题:连接建立错误:net::ERR_CONNECTION_TIMED_OUT的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    相关文章
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆