2016-08-13 11 views
1

Я пытался настроить брокера MQTT на моем сервере AWS EC2, используя порт 1883. Пока он работает с ruby-mqtt gem, но У меня возникли проблемы с настройкой его с помощью Paho Javascript Client для веб-сайта.Настройка клиента Paho Javascript (MQTT) с москитом на AWS EC2 Ubuntu + Ruby on Rails

То, что я сделал до сих пор:

Mosquitto

Установленная mosquitto на моем случае AWS EC2, и он работает и прослушивает порт 1883. Я подписался на тему локально с помощью команды

Группа
mosquitto_sub -h localhost -p 1883 -v -t 'topic1' 

AWS EC2 Security

Разрешить трафик через порт 1883 (по протоколу TCP)

Рубин на Rails

Installed рубинового MQTT камень, и протестировали MQTT работать, выполнив приведенный ниже код в рельсах консоли (среда разработки)

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

Сообщение появляется в терминале, где работает mosquitto_sub.

Nginx

Все это было сделано без каких-либо конфигурации на файлах конфигурации Nginx.

Pāho Клиент

Так я запустил локальный сервер Рельсы на локальном компьютере, и запустить пример Фрагмент кода JavaScript на одном из моего зрения HTML.

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

Но я не могу соединиться. Ошибка, которую я получаю в консоли для создания хрома:

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

Im не уверен, что здесь не так. Большое спасибо за любую помощь! Заранее спасибо!

ответ

1

Так что проблема Pāho клиент Javascript утверждает, что параметр для client объекта должен быть

адрес сервера обмена сообщений, как полностью квалифицированный WebSocket URI, как имя DNS или десятичный формат с точками Айпи адрес.

Так что, слушая порт 1883, который является стандартным портом для mqtt, не будет работать.

ruby-mqtt работы, как это происходит потому, что параметр рассматривается как MQTT URI

Другими словами, Paho подключается через ws://host в то время как ruby-mqtt подключается через mqtt://host.Последний подключается к порту 1883 с правильным протоколом (не уверен, что это правильное слово здесь) для правильного порта .

Таким образом, Paho должен подключиться к другому порту, где может использоваться протокол websocket.

Это мое решение.

Mosquitto

версии должны быть по крайней мере 1,4, где поддерживается WebSocket. Я добавляю последние 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 порта для москитов, чтобы подписаться на более чем два разных протокола соответственно. Группа

AWS безопасности

Разрешить трафик через порт 1884 г. (по протоколу TCP) Клиент

Pāho

mqtt.hostname.com изменить только строку, в которой клиентский объект является инициализируется до

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

Ваш москит to.conf потрясающе !! Thx – domih

+0

:) Отлично, я мог бы помочь – Vic