繁体   English   中英

JS WebSocket无法连接到运行Node.js'ws'包的AWS EC2实例

[英]JS WebSocket won't connect to my AWS EC2 instance running Node.js 'ws' package

我有一个安装了Node.js的Windows EC2实例,以及ws websocket npm软件包。 我的安全组为端口8080设置了自定义TCP连接,以允许所有连接。

我只是试图从浏览器连接到它,但是不能。 我已经尝试了一切,在整个SO和整个Internet上进行了搜索,但是我处于智慧的境地……请帮助!

在服务器上运行的节点脚本:

console.log("init started");

var WebSocket = require("ws");

var server = new WebSocket.Server({
    "host" : "private IP of instance", // also tried public IP, but it throws an error
    "port" : 8080
});

server.on("connection", function (client){
    console.log("client connection open");

    client.on("message", function (data){
        console.log("client message received");
    });
});

server.on("listening", function (){
    console.log("server listening");
});

server.on("error", function (e){
    console.log("server error", e);
});

console.log("init done");

当我从命令行运行上述代码时,我得到3条日志:“初始化已开始”,“初始化已完成”和“服务器监听”(正如我期望的那样)。 但是,当我从一个简单的HTML页面运行以下内容时,在Firefox中它告诉我“ Firefox无法在ws:// instance:8080 /的公共IP上建立与服务器的连接”。 而且我在服务器上没有更多的日志...

var sock = new WebSocket("ws://public IP of instance:8080/");

sock.onopen = function (){
    sock.send("test");
};

我确定这一定与我的EC2实例的配置方式有关,但是我只是不知道可能是什么问题-我已经检查并重新检查了入站规则-端口8080已对所有TCP开放交通! 我想念什么?

注意:我在两个脚本中都尝试使用“ localhost”作为主机,并在服务器本身上运行了测试HTML页面,并且一切正常。 服务器脚本按预期打印了“打开客户端连接”和“接收到客户端消息”。

编辑以添加在服务器脚本中指定实例的公共IP地址时收到的错误消息:

{ Error: listen EADDRNOTAVAIL PUBLICIP:8080
    at Object._errnoException (util.js:1022:11)
    at _exceptionWithHostPort (util.js:1044:20)
    at Server.setupListenHandle [as _listen2] (net.js:1334:19)
    at listenInCluster (net.js:1392:12)
    at doListen (net.js:1501:7)
    at _combinedTickCallback (internal/process/next_tick.js:141:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)
    at Function.Module.runMain (module.js:686:11)
    at startup (bootstrap_node.js:187:16)
    at bootstrap_node.js:608:3
  code: 'EADDRNOTAVAIL',
  errno: 'EADDRNOTAVAIL',
  syscall: 'listen',
  address: 'PUBLICIP',
  port: 8080 }

抱歉,我不知道该怎么做,因为我发誓对它进行了三遍检查,但是我的公共IP地址有误。

有时候我讨厌自己o_O

注意:这篇文章很好地解释了公共地址和私有地址之间的关系: https : //stackoverflow.com/a/34712279/859833

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM