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