2

aws ec2インスタンスでソケットに接続しようとしています。何らかの理由で私はそうすることができません。私のクライアント側のコードは次のとおりです。nodejsでawsでSocket.ioが動作しない

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 


}); 

}) 

「node server.js」を実行すると、「DB CONNECTED」と表示されますが、「SOCKET CONNECTED」は表示されません。 localhost:8080のコード(ローカルマシンでawsにはない)が正しく動作します。 aws Ec2で何か特別なことをする必要がありますか?どんな提案も感謝します。事前に感謝します

答えて

0

あなたが確認できる2つのことがあります。

  1. セキュリティグループの構成方法。一度だけ確認してください: 「カスタムTCPルール」ポート範囲3000(コードごと)を選択してください。ソースはどこでも(テスト用に)選択できます。

  2. ポート3000がlinux(aws)ファイアウォールで開かれているかどうかを確認する必要があります。あなたが実行することができます許可するには:

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

はのは、上記のコマンドを詳しく見てみましょう。私たちは、iptablesがコマンド内にあるもの、バイナリまたはプログラムそのものを知っています。他のオプションを見てみましょう。

-Iは挿入を意味します。これにより、チェーンの上部にルールが挿入されます。また、-Aをappendに使用すると、チェーンの最後に新しいルールを配置します。

INPUTは、ルールを入力するチェーンをiptablesコマンドに指示します。

-p tcpは、ルールにTCPプロトコルを使用するパケットのみを一致させるように指示します。

--dport 80は、ポート80またはhttpに向かうトラフィックと一致すると言います。 --dportは宛先ポートを表します。

-jは、JUMPが指定されたアクションまたはチェーンにジャンプすることを示します。ここでは、-j ACCEPTを使用しているため、ACCEPTアクションにジャンプし、トラフィックを通過させます。

+0

をACCEPT -j。解決済み!ありがとう! –

0

あなたは8890を使用している場合、ノードのデフォルトのポートは3000
あるbeacauseそれは8890 --dport sudoのはiptables -I TCP -p入力してください、私は問題のポートを開いていたと思います

関連する問題