Javascript JS WebSocket赢得';t连接到运行Node.js';ws';包裹
我有一个安装了Node.js的Windows EC2实例和websocket npm包。我的安全组为端口8080设置了自定义TCP连接,以允许所有连接 我正在尝试从浏览器连接到它,但无法。我什么都试过了,到处都找遍了,整个互联网都找遍了,我真是束手无策。。。请帮忙 服务器上运行的节点脚本:Javascript JS WebSocket赢得';t连接到运行Node.js';ws';包裹,javascript,node.js,amazon-ec2,websocket,Javascript,Node.js,Amazon Ec2,Websocket,我有一个安装了Node.js的Windows EC2实例和websocket npm包。我的安全组为端口8080设置了自定义TCP连接,以允许所有连接 我正在尝试从浏览器连接到它,但无法。我什么都试过了,到处都找遍了,整个互联网都找遍了,我真是束手无策。。。请帮忙 服务器上运行的节点脚本: console.log("init started"); var WebSocket = require("ws"); var server = new WebSocket.Server({ "h
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 start”、“init done”和“server listing”(正如我所期望的那样)。然而,当我从一个简单的HTML页面运行下面的代码时,在Firefox中,它告诉我“Firefox无法在ws://public IP of instance: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 }
对不起,我不知道怎么做,因为我发誓我检查了三遍,但我的公共IP地址错了 有时候我恨我自己
注意:这篇文章很好地解释了公共地址和私有地址之间的关系:服务器的IP是它将绑定到的(监听)。指定专用IP是无用的,因为外部传入连接无法访问该IP。找出它为公共IP提供错误的原因。如果服务器在公共IP上侦听,它应该可以工作。您也可以尝试0.0.0.0服务器IP,告诉它在所有接口上侦听。@marekful感谢您的评论-“0.0.0.0”与使用私有IP的结果相同-使用公共IP会给我一个“EADDRNOTAVAIL”错误。。。所以我研究了一下,尝试了几件没有运气的事。。。我尝试过:更改端口号(尝试了几个),使用公共DNS而不是IP,根本不指定“主机”,以及这些的几种组合。。。所有这些要么给了我“EADDRNOTAVAIL”错误,要么什么都没做(比如使用私有IP)。我还发现更多的帖子说要使用私有IP,或者有人称之为“内部IP”?我在我的实例详细信息中没有看到。。。