2016-09-29 4 views
1

Браузер использует это, чтобы подключиться к mosquitto (режим WebSockets):Как туннелировать браузер через mqtt через сервер?

new Paho.MQTT.Client('localhost', 9001, ''); 

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

В обычной установке nodejs и брокер находятся на одной машине. Как проложить маршрут через nodejs, поэтому nodejs может перенаправить соединения на localhost:9001? И я не хочу писать много кода для переупаковки сообщений и переопределения различных API подписки.

+0

Существуют различные прокси-серверы, которые поддерживают прокси-сервер через websocket, например ['node-http-proxy'] (https://github.com/nodejitsu/node-http-proxy) или [' rocky'] (https://github.com/h2non/rocky). – robertklep

ответ

1

localhost - это особый случай, имя хоста, которое относится к машине, на которой работает некоторый код.

Предполагая, что брокер, к которому вы хотите подключиться, находится на том же компьютере, на котором размещена веб-страница, вы можете использовать переменную location, чтобы получить необходимую информацию.

var client = new Paho.MQTT.Client(location.hostname, 9001, ''); 

Предполагая, что вы проксировании на веб-приложение, то WebSockets можно через прокси-а на тот же порт, который будет в конечном итоге с:

var client = new Paho.MQTT.Client(location.hostname, parseInt(location.port), ''); 

Для прокси в MQTT, а также (с помощью Nginx):

location /mqtt { 
    proxy_pass   http://127.0.0.1:9001/; 
    proxy_http_version 1.1; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection "upgrade"; 
} 
+0

Он не должен подвергаться воздействию Интернета. И я не могу открыть этот порт. – Velkan

+0

Тогда как ваше приложение доступно? Если у вас есть прокси-сервер nginx/apache для приложения, он также может проксировать веб-макеты брокеру и использовать тот же порт (80?) – hardillb

+0

, который звучит как правильное решение, но где будет отображаться часть TLS в браузере - когда я включаю его на nginx? – Velkan

0

Вы можете просто открыть другой порт, а затем настроить SSH-туннель (т. Е. SSH-туннель данных MQTT). Преимущество этого заключается в том, что он позволяет вам открывать или не открывать этот порт в Интернете с легкостью и безопасно (зашифровано).

В этом учебнике объясняется, как это сделать. Очевидно, что, поскольку данные MQTT передаются через SSH (через SSH Tunnel), он зашифрован на 100% и поэтому защищен. Кроме того, вы могли бы, конечно, использовать ключи RSA (что действительно делает безопасным соединение SSH), а затем написать простой сценарий BASH для автоматизации всего этого процесса, я думаю. Tutorial Ссылка: SSH Tunnel MQTT

+1

Но нет способа получить веб-браузер для туннелирования подключения к веб-соединениям по ссылке SSH, поэтому это вряд ли будет полезно – hardillb