2

我正尝试连接到aws ec2实例上的套接字。出于某种原因,我无法这样做。我的客户端代码:Socket.io不能在nodejs上使用aws

var socket = io.connect('http://ec2-MY-IP.us-west-2.compute.amazonaws.com:3000'); 
      console.log(socket); 
        socket.on('connect', function(){ 
         alert(socket.id); // 'G5p5... 
        }); 
    socket.on('connect_error', function(){ 
       console.log('Connection Failed'); 
      }); 

我总是得到“连接失败”在浏览器控制台

我从安全组的入站部分打开的端口,当我使用:

telnet ec2-MY-IP.us-west-2.compute.amazonaws.com 3000 

它给我输出

Trying ... 
Connected to ec2-MY-IP.us-west-2.compute.amazonaws.com. 
Escape character is '^]'. 

我的服务器端代码去这里:

const express = require('express'); 
const bodyParser= require('body-parser'); 
const app = express(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 
http.listen(3000,() => { 
console.log('listening on 3000'); 
    }); 
    MongoClient.connect('mongodb://ec2-MY-IP.us-west-2.compute.amazonaws.com:27017/userlogsdemo', (err, database) => { 
    if (err) return console.log(err) 
db = database; 
console.log("DB CONNECTED") 
io.on('connection', function (socket) { 
    console.log("SOCKET CONNECTED") 
    socketobj = socket 
    socket.on('reloadtickets', function (data) { 
    connectedusers.forEach(function(v){ 
      if(v.connecteduserid == data.target){ 
       setTimeout(function() { 
        io.emit('reloadticketsok',data); 
       }, 100) 


      } 
     }); 
}); 
// WHEN SOMEONE IS DISCONNECTED 


}); 

}) 

当我运行“节点server.js”它说“数据库连接”,但不是“SOCKET CONNECTED”。 代码localhost:8080(在我的本地机器不在aws上)正常工作。在aws Ec2上是否有特别的要求?任何建议将不胜感激。在此先感谢

回答

0

有两件事,你可以检查。

  1. 如何配置安全组。请验证一次: 您应该选择'自定义TCP规则'端口范围3000(根据您的代码),您可以在任何地方选择源(用于测试)。

  2. 您应该检查端口3000是否在linux(aws)防火墙上打开。为了让你可以运行:

    sudo iptables -I INPUT -p tcp --dport 3000 -j ACCEPT 
    

让我们在上面的命令一探究竟。我们知道iptables在命令中的含义,即二进制或程序本身,现在让我们看看其他选项。

-I代表插入。这将在链的顶部插入规则。您也可以使用-A作为追加,这会将新规则放置在链的末尾。

INPUT告诉iptables命令您希望输入规则的链。

-p tcp告诉规则只匹配使用TCP协议的数据包。

--dport 80表示匹配端口80或HTTP的流量。 --dport代表目标端口。

-j表示JUMP跳转到指定的动作或链。在我们的例子中,我们使用-j ACCEPT,因此它将跳转到ACCEPT操作并允许流量通过。

+0

我认为问题是与开放的端口。解决了!谢谢! –

0

,如果你使用的是8890东阳节点默认的端口应该是3000
须藤的iptables -I INPUT -p根据tcp --dport 8890 -j ACCEPT