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

时间:2018-02-12 02:43:02

标签: javascript node.js amazon-ec2 websocket

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

我只是想从浏览器连接到它,但不能。我已经尝试了所有的东西,搜遍了SO和整个互联网,而且我的智慧结束了......请帮忙!

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

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个日志:“init started”,“init done”和“server listening”(正如我所料)。但是,当我从一个简单的HTML页面运行下面的代码时,在Firefox中它告诉我“Firefox无法在ws://公共IP实例:8080 /上建立与服务器的连接”。而且我在服务器上没有更多日志......

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 }

1 个答案:

答案 0 :(得分:0)

对不起,我不知道怎么做,因为我发誓我三重检查它,但我的公共IP地址错了。

有时我讨厌自己o_O

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