2016-08-13 2 views
1

Ich habe versucht, einen MQTT-Broker auf meinem AWS EC2-Server mit dem Port 1883 einzurichten. Bisher funktioniert es mit der ruby-mqtt gem, aber Ich habe Probleme mit der Einrichtung mit Paho Javascript Client für die Website.Einrichten von Paho Javascript Client (MQTT) mit mosquitto auf AWS EC2 Ubuntu + Ruby on Rails

Was ich bisher getan haben:

mosquitto

installiert mosquitto auf meine AWS EC2-Instanz, und es läuft und lauscht auf Port 1883. ich zu einem Thema abonniert lokal mit dem Befehl

mosquitto_sub -h localhost -p 1883 -v -t 'topic1' 

AWS EC2 Security Group

erlaubt Verkehr über Port 1883 (unter TCP-Protokoll)

Ruby on Rails

installiert rubin MQTT Juwel und getestet, um die MQTT durch zu arbeiten, den Code unten in Schienen-Konsole ausgeführt wird (Entwicklungsumgebung)

MQTT::Client.connect(ip_address_or_domain_name) do |c| 
    c.publish('topic1', 'message to topic 1') 
end 

Die Nachricht wird im Terminal angezeigt, in dem mosquitto_sub ausgeführt wurde.

Nginx

All dies wurde ohne Konfiguration auf Konfigurationsdateien Nginx getan.

Paho Kunde

So feuerte ich einen lokalen Schienen-Server auf meinem lokalen Computer auf, und das Beispiel Javascript-Schnipsel auf einem meiner HTML-Ansicht laufen.

// 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); 
} 

Aber ich schalte mich nicht an. Der Fehler, den ich in der Chrome-Entwicklerkonsole erhalte, lautet:

Ich bin nicht sicher, was hier falsch ist. Ich schätze jede Hilfe sehr! Danke im Voraus!

Antwort

1

Das Problem ist also Paho Javascript-Client stellt fest, dass der Parameter für client Objekt hat

die Adresse des Nachrichtenservers sein, als voll qualifizierten WebSocket URI, als DNS-Namen oder mit Trennzeichen IP Adresse.

Also, es auf Port 1883 zu hören, das ist der Standard-Port für mqtt, wird nicht funktionieren.

ruby-mqtt funktioniert, wie es ist, weil es Parameter als MQTT uri behandelt wird

Mit anderen Worten verbindet Paho über ws://host während ruby-mqtt über mqtt://host verbindet.Letzterer verbindet sich mit Port 1883 mit dem korrekten Protokoll (nicht sicher, ob dies das richtige Wort hier ist) für den korrekten Port .

Also Paho muss mit einem anderen Port verbinden, wo das Websocket-Protokoll verwendet werden kann.

Das ist meine Lösung.

mosquitto

Version müssen mindestens 1,4 sein, wo websocket unterstützt wird. Ich füge die letzten 3 Zeilen der Standarddatei mosquitto.conf hinzu.

# /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 

Dies öffnet 2 Ports für Moskito, um jeweils über 2 verschiedene Protokolle zu abonnieren.

AWS Security Group

erlauben Verkehr über Port 1884 (unter TCP-Protokoll)

Paho Kunde

mqtt.hostname.com Änderung nur die Zeile, in der das Client-Objekt ist initialisiert auf

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

Ihre Moskitos to.conf ist unglaublich !! Thx – domih

+0

:) Toll könnte ich helfen – Vic

Verwandte Themen