2016-08-13 10 views
1

ポート1883を使用してAWS EC2サーバーでMQTTブローカーをセットアップしようとしています。これまでのところ、ruby-mqtt gem私はウェブサイトのPaho Javascript Clientで設定することに問題があります。AWS EC2 Ubuntu + Ruby on RailsでPaso Javascript Client(MQTT)を設定する

私がこれまで行ってきた:

Mosquitto

私のAWS EC2インスタンス上mosquittoをインストールし、そして私がローカルコマンド

を使用してトピックを購読実行し、ポート1883でリッスンしています
mosquitto_sub -h localhost -p 1883 -v -t 'topic1' 

AWS EC2のセキュリティグループ

のRuby on Railsの

インストールルビーMQTT宝石をポート1883経由(TCPプロトコルの下で)トラフィックを許可し、レールコンソール(開発環境)

に以下のコードを実行することによって動作してMQTTをテスト
MQTT::Client.connect(ip_address_or_domain_name) do |c| 
    c.publish('topic1', 'message to topic 1') 
end 

mosquitto_subが実行されていた端末にメッセージが表示されます。 nginxの

は、このすべては、nginxの設定ファイル上の任意の設定なしで行われました。

PAHOクライアントは、だから、私は、ローカルコンピュータ上のローカルレールサーバーを解雇し、私のHTMLビューの1に例のJavaScriptスニペットを実行します。

// Create a client instance 
client = new Paho.MQTT.Client("mqtt.hostname.com", Number(1883), "", "clientId") 

// set callback handlers 
client.onConnectionLost = onConnectionLost; 
client.onMessageArrived = onMessageArrived; 

// connect the client 
client.connect({onSuccess:onConnect}); 


// called when the client connects 
function onConnect() { 
    // Once a connection has been made, make a subscription and send a message. 
    console.log("onConnect"); 
    client.subscribe("topic1"); 
    message = new Paho.MQTT.Message("Hello"); 
    message.destinationName = "topic1"; 
    client.send(message); 
} 

// called when the client loses its connection 
function onConnectionLost(responseObject) { 
    if (responseObject.errorCode !== 0) { 
    console.log("onConnectionLost:"+responseObject.errorMessage); 
    } 
} 

// called when a message arrives 
function onMessageArrived(message) { 
    console.log("onMessageArrived:"+message.payloadString); 
} 

ただし、接続できません。 Chromeのデベロッパーコンソールに表示されるエラーは次のとおりです。

WebSocket connection to 'ws://mqtt.example.com:1883/' failed: Error during WebSocket handshake: net::ERR_CONNECTION_RESET 

ここで何が間違っているのかわかりません。どんな助けにも大変感謝しています!前もって感謝します!

答えて

1

だから、問題はPAHO JavaScriptクライアントがclientオブジェクトのパラメータは、DNS名またはドット付き10進として、完全修飾のWebSocket URIとして、メッセージングサーバーのアドレス

なければならないと述べていますIPアドレス。

したがって、mqttの標準ポートであるポート1883をリッスンすることはできません。 ruby-mqttmqtt://hostを介して接続しながらパラメータはMQTTのURIすなわち

として扱われるため、そのまま

ruby-mqtt作品、Pahows://hostを介して接続されています。後者は、正しいポートの正しいポート番号( )のポート1883に接続します。

したがってPahoは、websocketプロトコルを使用できる別のポートに接続する必要があります。

これは私のソリューションです。

Mosquitto

バージョンのWebSocketがサポートされている、少なくとも1.4である必要があります。最後の3行をデフォルトのmosquitto.confファイルに追加します。

# /etc/mosquitto/mosquitto.conf 
pid_file /var/run/mosquitto.pid 

persistence true 
persistence_location /var/lib/mosquitto/ 

log_dest file /var/log/mosquitto/mosquitto.log 

include_dir /etc/mosquitto/conf.d 

port 1883 

listener 1884 
protocol websockets 

これは、2つ以上の異なるプロトコルにそれぞれサブスクライブするために、2つのポートをモスキートで開きます。

AWSセキュリティグループ

(TCPプロトコルの下で)ポート1884上でmqtt.hostname.com 変更クライアント・オブジェクトがあるだけでライン

PAHOクライアント

トラフィックを許可します

client = new Paho.MQTT.Client("mqtt.hostname.com", Number(1884), "", "clientId") 
+0

あなたのモスキートto.confは素晴らしいです! Thx – domih

+0

:)素晴らしい私は助けになることができます – Vic

関連する問題